Я разочаровался в попытке заблокировать все действия в приложении. В настоящее время я размещаю в каждом контроллере, кроме устройства / регистрации:
load_and_authorize_resource
в пользовательской модели:
def role?(role)
roles.include? role.to_s
end
в модели способности:
if user.role? :superadmin
can :manage, :all
end
Однако я получаю следующую ошибку:
undefined local variable or method `roles'
app/models/user.rb:33:in `role?'
app/models/ability.rb:7:in `initialize'
Спасибо за вашу помощь.
ОБНОВЛЕНИЕ: Из-за ответа Богдана, приведенного ниже, я заглянул в документацию и обнаружил, что существуют разные методы настройки моделей канканов. В настоящее время у нас есть 6 различных ролей, в результате чего в базе данных есть 6 различных логических полей. Я думал об иерархическом подходе к определению ролей, когда у одного пользователя может быть много ролей, а у одной роли много пользователей. Есть два способа установить определения ролей. Первый . Второй . Для простоты использования я думаю, что я определю каждую роль исчерпывающе, поэтому для каждого человека есть только одна роль. Интересно, каковы недостатки этого.
ОБНОВЛЕНИЕ: Я прокомментировал все другие роли, кроме superadmin, как определено выше. Понял, что это не имеет никакого отношения ко многим проблемам. Итак ...