Cancan Gem простой вопрос

модели /ability.rb

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user

    if user.role? :admin
      can :manage, :all
    else
      can :read, :all
      can :create, Comment
      can :update, Comment do |comment|
        comment.try(:user) == user || user.role?(:moderator)
      end
      if user.role?(:author)
        can :create, Article
        can :update, Article do |article|
          article.try(:user) == user
        end
      end
    end
  end
end

В Railscasts есть методы user.role?:admin & if user.role?(:author). Я не понимаю. Нужно ли создавать метод в модели, чтобы он работал?

Я храню роли в таблице Users как столбец ролей.

2 ответа

Решение

Да, вам нужно написать это самостоятельно. Однако у проекта CanCan есть вики-страница, описывающая, как это сделать.

Первая строка вики гласит:

"CanCan отделен от того, как вы реализуете роли в модели User, но как можно настроить базовую авторизацию на основе ролей?"

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

Есть также пример " Отдельная ролевая модель", который мне лично больше нравится. Это зависит от того, где вы хотите хранить информацию о своей роли.

Если вы ищете драгоценный камень, который является подключи и играй, то проверьте декларативную авторизацию. Рейнб говорит, что он разработал Cancan, потому что DA был излишним для некоторых проектов здесь: http://railscasts.com/episodes/192-authorization-with-cancan?autoplay=true

Другие вопросы по тегам