以下是我的能力课程中的代码片段
if user.admin?
can :manage, :all
can :destroy, :all if != current_user
我相信你可以弄明白我在这里要做什么。我意识到破坏包含在管理中,我在那里重复自己。有什么建议吗?
编辑 Yjerem的回答是正确的,我只是改了它以适应我的代码。这就是它的样子。
if user.admin?
can :manage, :all
cannot :destroy, User, :id => user.id
正如Yjerem所说,在cancan中,能力优先级表明定义的能力低于他们,因此管理员可以使用上面的代码管理除了在其下定义的所有内容。
答案 0 :(得分:5)
阅读Ability Precedence,有一个例子适合你!
基本上你想要的是cannot
方法:
if user.admin?
can :manage, :all
cannot :destroy, User, :id => current_user.id
因为cannot
规则低于更一般的规则,所以它会覆盖它。
答案 1 :(得分:1)
我会尝试这样的事情(假设您有一个帐户/用户模型):
def initialize(user)
...
if user.admin?
can :manage, :all
can :destroy, Account do |account|
account.user != user # admin can destroy all Accounts/Users except his own
end
end
...
end