Ruby on rails 限制管理员使用cancan销毁自己的帐户
下面是我的能力类代码的一个片段Ruby on rails 限制管理员使用cancan销毁自己的帐户,ruby-on-rails,cancan,restrict,Ruby On Rails,Cancan,Restrict,下面是我的能力类代码的一个片段 if user.admin? can :manage, :all can :destroy, :all if != current_user 我相信你会明白我在这里想做什么。我意识到破坏包括在管理中,我在那里重复我自己。有什么建议吗 EDITYjerem的答案是正确的,我只是根据我的代码修改了答案。这就是它看起来的样子 if user.admin? can :manage, :all cannot :destro
if user.admin?
can :manage, :all
can :destroy, :all if != current_user
我相信你会明白我在这里想做什么。我意识到破坏包括在管理中,我在那里重复我自己。有什么建议吗
EDITYjerem的答案是正确的,我只是根据我的代码修改了答案。这就是它看起来的样子
if user.admin?
can :manage, :all
cannot :destroy, User, :id => user.id
正如Yjerem还说的,在cancan中,能力优先权表示,较低级别定义的能力优于其他能力,因此管理员可以使用上面的代码管理除其下定义的以外的所有能力 我会尝试这样做(假设您有一个帐户/用户模型): 阅读,这里有一个例子就是为你准备的 基本上,您需要的是
cannot
方法:
if user.admin?
can :manage, :all
cannot :destroy, User, :id => current_user.id
因为
不能
规则低于更一般的规则,它会覆盖它。我认为当前用户
无法从能力类中访问。我在他们的文档中到处寻找。真不敢相信我错过了。@feelnowaycurrent\u user
这是传递到能力类的对象(与您的答案中的user
相同),而我的文本编辑器对此没有错误。如果user.admin?can:manage,:all can:destroy,User do | u | u.id!=user.id end它仍然给我错误。我将很快地看一看优先级文档。
if user.admin?
can :manage, :all
cannot :destroy, User, :id => current_user.id