Способности Rolify, возвращающие false

У меня возникла странная проблема с использованием Rolify (нажмите, чтобы перейти к руководству, которому я следую) с Rails: похоже, что метод can не работает, поэтому привилегии пользователя становятся непригодными. Ниже мой файл ability.rb и вывод консоли, где демонстрируется проблема.

class Ability
  include CanCan::Ability

  def initialize(user)

    user ||= User.new # guest user (not logged in)

    if user.has_role? :admin
      can :manage, :all
    else
      can :read, :all
    end

  end
end

Консольные тесты ($ rails console)

user = User.find(2)
user.add_role "admin"
user.has_role? :admin
=> **true**

ability = Ability.new(user)
ability.can? :manage, :all
=> **false**
ability.can? :read, :all
=> **false**

Я также проверил базу данных, и все отношения настроены правильно. Я запускаю рельсы 3.2.13.


person Tomanow    schedule 08.04.2013    source источник
comment
Пробовали ли вы передавать реальную модель или класс модели вместо :all при тестировании ability.can??   -  person PinnyM    schedule 09.04.2013


Ответы (2)


Проблема заключалась в конфликте драгоценных камней либо с canard, либо с declarative_authorization. Отключение обоих и перезапуск сервера rails решили проблему. Возможно, это поможет другим, кто пошел по тому же пути, пробуя эти разные драгоценные камни.

person Tomanow    schedule 08.04.2013

CanCan полагается на существование метода current_user, который возвращает пользователя, вошедшего в систему. Этот метод существует, если вы используете, например, устройство для аутентификации. Если вы используете что-то другое, вы должны убедиться, что метод current_user существует.

person Sergey Kuleshov    schedule 08.04.2013