Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby On Rails > настройка cancan


Автор: AndreyDr 22.3.2011, 22:15
Здравствуйте, сел разбираться с cancan для организации распределения ролей пользователей и приложении.
создал две таблицы users и roles, связаны они следующим образом:
role.rb => has_many :users
user.rb => belongs_to :role
в ability.rb следующее
Код

class Ability
  include CanCan::Ability
  
  def initialize(user)
    user ||= User.new # guest user

    if user.role? :admin
      can :manage, :all
    elsif user.role? :operator
      can :manage, Post
    else 
      can :read, :all
    end
  end
end

но вот не могу понять как определить метод role? в user.rb
Если кто уже пользовался этим плагином, поделитесь опытом пожалуйста!

Автор: DeTeam 22.3.2011, 23:07
ну по контексту нужно прописать в  модели User
что-то вроде


Код

def role?(role_name)
  role.name.to_sym == role_name
end

Автор: AndreyDr 22.3.2011, 23:51
В ответ получаю
Код

undefined method `name' for nil:NilClass


Автор: DeTeam 23.3.2011, 00:13
Предполагалось, что вы вместо name подставите поле которое отвечает за название роли smile

Автор: AndreyDr 23.3.2011, 06:31
это я понял )) так дело в том что в таблице Roles поле name и отвечает  за название роли =)
========================
На свежую голову утром думается легче, вроде решил свой вопрос следующим образом:
Код

def role?(role_name)
     self.role_id == Role.find_by_name(role_name).id
end

буду проверять =) 

Автор: solenko 23.3.2011, 20:21
undefined method `name' for nil:NilClass
логично для пользователя без роли
Код

def role?(role_name)
  role.nil? || role.name.to_sym == role_name
end

Автор: DeTeam 23.3.2011, 21:00
Код

!role.nil? && role.name.to_sym == role_name

Автор: source777 24.3.2011, 15:15
Цитата(DeTeam @  23.3.2011,  21:00 Найти цитируемый пост)
    
!role.nil? && role.name.to_sym == role_name

тогда уж просто
Код

role && role.name.to_sym == role_name

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)