Cancan Gem простой вопрос - PullRequest
       10

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

0 голосов
/ 02 марта 2011

models /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 ]

0 голосов
/ 16 июля 2011

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

0 голосов
/ 02 марта 2011

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

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

"CanCan отделен от того, как вы реализовать роли в модели пользователя, но как можно создать основную роль на основе разрешение? "

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

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

...