我希望能够让我的管理员用户能够控制他们在帐户上的标准用户几乎可以执行的每一项操作。在为他们创建组权限以供管理时,是最好有一个包含100多行布尔值的大表,还是最好将所有权限存储在数据库文本字段中的哈希中?也许只储存他们不能做的事情?或者他们能做的事情?(哪个列表通常较小?)
在网络应用程序中有标准的方法吗?
我会存储的一些示例:
是否可以删除对象
是否可以编辑对象
是否可以创建对象
是否可以删除minions_object
是否可以删除管理员对象?
我真的很喜欢这个罐子?可以使用的语法。如果Can-Can不是定义做事的函数,那就太好了。除了存储所有这些布尔值之外,我最终可能还会这样做。。因为存在将覆盖组级别权限的帐户级别权限。
[edit]-将代码澄清了一点
我认为你真的应该再次查看CanCan,如果有任何类型的权限分组(即将用户分组为经理、小黄人……具有类似权限,只需将该字段保存到数据库中,而不是整个能力散列)
下面是一个例子,说明能力类在你的情况下可能是什么样子的:
class Ability
include CanCan::Ability
def initialize(user)
# All registered users can edit their own objects
can :manage, [Object], :user_id => user.id
# Different roles
if user.moderator?
can :delete, [Object], :user_id => user.minion.id
elsif user.admin?
can :delete, [Object], :user_id => user.manager.id
end
end
end
这里有一个很好的Ruby身份验证宝石列表。
我已经深入使用了CanCan和acl9,并回顾了其他几个。我同意使用CanCan的建议,但我在一个需要用户、角色和组分配权限管理的复杂应用程序上使用acl9 gem也取得了不错的成功。
这取决于权限的具体用途,也许像CanCan这样的东西就是你想要的?
https://github.com/ryanb/cancan
你能描述一些其他权限吗?