2013-03-08 7 views
0

Я новичок в Rails, и у меня возникают проблемы с выяснением того, как создавать роли пользователей, а затем работать с Cancan. Я следую за рельсами, наложенными на эту и канканскую вики. То, что я не понимаю, - это определить каждую роль пользователя, например, что может получить доступ администратор, зарегистрированный член и гость. Я не уверен, что я на правильном пути или нет с моей кодировкой. Я также столкнулся с «неопределенной локальной переменной или методом« role_mask ».Настройка роли пользователя в cancan

Я не верю, что у меня есть соответствующие роли в нижнем файле. Я создал аутентификацию пользователя с нуля, если это помогает. В разделах, которые я имею до сих пор, есть галереи и профиль пользователя. ATM, если я создаю новую учетную запись и выберем раскрывающийся список «admin», у меня нет полномочий администратора. Я все еще блокирую доступ к страницам.

ability.rb

class Ability 
    include CanCan::Ability 

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

    if @user && @user.role?(:admin) 
     can :manage, :all 
    else 
     can :read, :all 
    end 

    if user.role? :user 
     can :manage, Profile 
    end 

    if user.role? :admin 
     can :manage, Profile 
    end 
    end 
end 

user.rb

ROLES = %w[admin user guest banned] 

    def roles=(roles) 
    self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.sum 
    end 

    def roles 
    ROLES.reject { |r| ((roles_mask || 0) & 2**ROLES.index(r)).zero? } 
    end 

    def role?(role) 
    roles.include? role.to_s 
    end 

ответ

0

В файле ability.rb,

if @user && @user.role?(:admin) 

, вероятно, следует

if user && user.role?(:admin) 
+0

Да, я заметил, что раньше и продолжал переключаться взад и вперед, это ничего не меняет. ATM Я не понимаю, как назначить истинное значение для каждой роли пользователя. Теперь я могу создать учетную запись, выбрать администратора ... однако у меня все еще нет привилегий администратора. – pwz2000

+0

Я предполагаю, что вы пытаетесь установить его в какой-то форме; вы пытались установить его через консоль, чтобы убедиться, что она работает? Кроме того, чтобы проверить, ваша таблица 'User' имеет столбец' role_mask', правильно? –

+0

Да, я установил его в форме. Я не делал консоль, честно говоря, я еще не использовал консоль для этого проекта. Я знаю, что у меня нет назначенных ролей для хранения значения. – pwz2000

Смежные вопросы