[編輯通過@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事情可能會更復雜(例如條件許可),但這也是一個拙劣的管理方式,所以我認爲這應該足以滿足大多數應用程序的需求。