Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 限制管理员使用cancan销毁自己的帐户_Ruby On Rails_Cancan_Restrict - Fatal编程技术网

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

因为
不能
规则低于更一般的规则,它会覆盖它。

我认为
当前用户
无法从能力类中访问。我在他们的文档中到处寻找。真不敢相信我错过了。@feelnoway
current\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