1

我希望能够让我的管理员用户能够控制其帐户上的标准用户可以执行的几乎所有操作。在创建组权限供他们管理时,是拥有一个包含一百多行布尔值的巨型表更好,还是将所有权限存储在数据库文本字段中存储的哈希中更好?也许只存储他们不能做的事情?或者他们能做的事情?(哪个列表通常更小?)

在 webapps 中是否有这样做的标准方法?

我要存储的一些示例:

可以删除对象吗?
可以编辑对象吗?
可以创建对象吗?
can_delete_minions_object?
can_delete_managers_object?

我真的很喜欢can_?can-can 使用的语法。如果不是为做事定义函数,Can-can 会很棒。除了存储所有这些布尔值之外,我最终可能还会这样做。因为有帐户级别的权限会覆盖组级别的权限。

4

3 回答 3

1

是一个很好的 Ruby 身份验证 gem 列表。

我已经深入使用过 CanCan 和 acl9,并审查了其他几个。我同意使用 CanCan 的建议,但我在需要用户、角色和组分配权限管理的复杂应用程序上使用 acl9 gem 也取得了不错的成功。

于 2012-02-29T05:25:36.043 回答
1

[编辑] - 稍微澄清一下代码

如果有任何类型的权限分组,我认为你真的应该再次检查 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
于 2012-02-29T03:31:46.890 回答
0

这取决于权限的确切用途,也许像 CanCan 这样的东西是你所追求的?

https://github.com/ryanb/cancan

否则您能否描述一些权限?

于 2012-02-29T02:38:07.103 回答