Подтвердить что ты не робот

Cancan: разница между "управлять" и комбинацией "читать, создавать, обновлять и уничтожать"?

При попытке отладки использования cancan я обнаружил, что, если использовать следующее, я могу пройти мимо сообщения accessedied:

  can :manage, Model

Когда я изменил его на следующее, мне отказали в доступе:

  can :read, Model
  can :create, Model
  can :update, Model
  can :destroy, Model

В чем заключается управление, заключающееся в том, что сочетание чтения, создания, обновления и уничтожения не выполняется?

Спасибо.

4b9b3361

Ответ 1

Вы можете определить пользовательские действия (когда вы определяете возможности пользователя для данной модели, вы не ограничены действиями 7 RESTful (создавать, обновлять, уничтожать и т.д.), вы можете создать свои собственные.) Если у вас есть управлять всеми, вы также сможете получить доступ к этим пользовательским действиям.

Ответ 2

По умолчанию CanCan сопоставляет :read, :create и т.д. с соответствующими действиями контроллера, например:

def default_alias_actions
  {
    :read => [:index, :show],
    :create => [:new],
    :update => [:edit],
  }
end

Но, конечно, вы не ограничены тем, что у вас есть только эти действия в вашем контроллере, в конечном итоге действие контроллера может иметь любое имя. Точно так же вы не ограничены наличием всего :read, :create, :update, :detroy в CanCan. Вы можете использовать любой символ для любого действия контроллера. Скажем, у вас есть действие на вашем контроллере под названием do_cool_things, тогда вы можете использовать псевдоним любого символа для этого действия, которое будет использоваться CanCan, например:

alias_action :do_cool_things, :to => :coolify

Тогда вы сможете это сделать:

can :coolify, Neighborhood

Это означает, что текущий пользователь будет иметь доступ к методу :do_cool_things NeighborhoodsController. Однако, если вы использовали :manage, вам не нужно было бы определять это отдельное действие, так как :manage является catch-all. Итак, если вы сделали:

can :manage, Neighborhood

У текущего пользователя все равно был бы доступ к методу :do_cool_things контроллера.

Итак, :manage позволяет вам что-то делать, но :read, :create, :update and :destroy - это всего лишь 4 из бесконечного числа действий CanCan, которые вы можете определить и сопоставить с любым выбранным вами действием контроллера.