Ограничение администратора от уничтожения собственной учетной записи с помощью cancan - PullRequest
3 голосов
/ 11 мая 2011

Вот фрагмент моего кода из класса моих способностей

if user.admin?
      can :manage, :all
      can :destroy, :all if != current_user

Я уверен, что вы можете понять, что я пытаюсь сделать здесь. Я понимаю, что уничтожить входит в управление, и я повторяю себя там. Есть предложения?

РЕДАКТИРОВАТЬ Ответ Йерема был правильным, и я просто изменил его, чтобы он соответствовал моему коду. Вот как это выглядит.

 if user.admin?
      can :manage, :all
      cannot :destroy, User, :id => user.id

Как сказал Йьерем, в канкане приоритетность способностей гласит, что способности, определенные ниже, превосходят над ними, так что администратор может управлять всем, кроме того, что определено в нем, используя код выше.

Ответы [ 2 ]

5 голосов
/ 11 мая 2011

Чтение Способность Приоритет , есть пример для вас!

В основном вам нужен метод cannot:

if user.admin?
      can :manage, :all
      cannot :destroy, User, :id => current_user.id

Поскольку правило cannot ниже более общего, оно переопределяет его.

1 голос
/ 11 мая 2011

Я бы попробовал что-то вроде этого (при условии, что у вас есть модель учетной записи / пользователя):

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
...