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