限制管理员使用cancan销毁自己的帐户

Sak*_*ian 3 ruby-on-rails restrict cancan

以下是我的能力课程中的代码片段

if user.admin?
      can :manage, :all
      can :destroy, :all if != current_user
Run Code Online (Sandbox Code Playgroud)

我相信你可以弄清楚我在这里要做什么.我意识到破坏包含在管理中,我在那里重复自己.有什么建议?

编辑 Yjerem的答案是正确的,我只是改变它以适合我的代码.这就是它的样子.

 if user.admin?
      can :manage, :all
      cannot :destroy, User, :id => user.id
Run Code Online (Sandbox Code Playgroud)

正如Yjerem所说,在cancan中,能力优先级表明定义下限的能力优于其他人,因此管理员可以使用上面的代码管理除了在​​其下定义的所有内容.

Jer*_*ten 5

阅读能力优先,这里有一个例子适合你!

基本上你想要的是cannot方法:

if user.admin?
      can :manage, :all
      cannot :destroy, User, :id => current_user.id
Run Code Online (Sandbox Code Playgroud)

因为cannot规则低于更普遍的规则,所以它会覆盖它.