Я новичок в 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
Да, я заметил, что раньше и продолжал переключаться взад и вперед, это ничего не меняет. ATM Я не понимаю, как назначить истинное значение для каждой роли пользователя. Теперь я могу создать учетную запись, выбрать администратора ... однако у меня все еще нет привилегий администратора. – pwz2000
Я предполагаю, что вы пытаетесь установить его в какой-то форме; вы пытались установить его через консоль, чтобы убедиться, что она работает? Кроме того, чтобы проверить, ваша таблица 'User' имеет столбец' role_mask', правильно? –
Да, я установил его в форме. Я не делал консоль, честно говоря, я еще не использовал консоль для этого проекта. Я знаю, что у меня нет назначенных ролей для хранения значения. – pwz2000