[编辑通过@RadoslavStankov给出的链接是比这更好的答案。]
你可以用惨惨做到这一点很容易。只需建立一个权限模型(其中has_and_belongs_to_many :users
),并在您的Ability#initialize
从模型中加载适合用户的权限,并说用户can
可以完成这些权限。然后制定适当的用户界面来管理该模型。
事情是这样的:
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
user.permissions.each do |permission|
can permission.symbol, permission.scope
end
user.prohibitions.each do |permission|
cannot permission.symbol, permission.scope
end
end
end
其中scope
返回类似:all
为nil
范围,或Object.const_get(@scope_name)
否则......与它玩。无论如何,这是可行的。
更复杂的CanCan事情可能会更复杂(例如条件许可),但这也是一个拙劣的管理方式,所以我认为这应该足以满足大多数应用程序的需求。