我希望能够让我的管理员用户能够控制其帐户上的标准用户可以执行的几乎所有操作。在为他们创建组权限进行管理时,最好是拥有一个包含超过一百行布尔值的巨型表,还是将所有权限存储在存储在数据库文本字段中的哈希中更好?也许只存储他们不能做的事情?或他们可以做的事情? (无论哪个列表通常较小?)
在webapps中有这样的标准方法吗?
我存储的一些例子:
can_delete_object?
can_edit_object?
can_create_object?
can_delete_minions_object?
can_delete_managers_object?
我真的很喜欢can_?可以使用的语法。 如果它不是定义做事的功能,那么Can-can会很棒。除了存储所有这些布尔值之外,我仍然可能最终做到这一点..因为有帐户级权限将覆盖组级权限。
答案 0 :(得分:1)
[edit] - 稍微澄清了一下代码
我认为你应该再次检查CanCan是否有任何类型的权限分组(即将组用户分为经理,小兵......具有相似的权限,只是将该字段保存到数据库而不是整个哈希的能力)
下面是一个关于Ability类在你的情况下会是什么样子的例子:
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
答案 1 :(得分:1)
Here是一个很好的Ruby认证宝石列表。
我已经深入使用了CanCan和acl9,并回顾了其他几个。我同意使用CanCan的建议,但我在一个复杂的应用上需要用户,角色和组分配权限管理的acl9 gem也取得了不错的成功。
答案 2 :(得分:0)