【发布时间】:2017-01-05 10:14:55
【问题描述】:
我想在 Rails 中实现基于角色的授权。对于登录,我使用 gem 设计,效果很好。但是在我在 tutorial 中包含一些 cancancan 的代码后,我收到一个错误未定义的方法用户名,当我删除用户名时,我收到一个错误未定义的方法电子邮件...
这是我的代码:
ability.rb(管理具有特定角色的用户可以做什么)
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
if user.role?(:admin)
can :manage, :all
elsif user.role?(:mitarbeiter)
can :manage, :documents
can :manage, :entries
end
end
end
我的 user.rb 的一部分
ROLES = {0 => :admin, 1 => :mitarbeiter}
attr_reader :role :
def initialize(role_id = 0)
@role = ROLES.has_key?(role_id) ? ROLES[role_id] : ROLES[0]
end
def role?(role_name)
role == role_name
end
我的 application_controller.rb 的一部分
protect_from_forgery with: :exception
check_authorization
rescue_from CanCan::AccessDenied do |exception|
flash[:warning] = exception.message
redirect_to root_path
end
private
def current_user
User.new(session[:id])
end
helper_method :current_user
我真的不明白怎么回事... 我以为我必须在 user.rb 中设置 @user 之类的 @role 但它没有帮助
【问题讨论】:
-
这个错误发生在哪里 - 你没有在你的问题的任何地方调用
username? -
啊,对不起,我在视图中调用 current_user.username。在我使用 cancancan 之前,它确实有效......
-
我认为你不应该为 ActiveRecord 派生的模型覆盖
initialize,至少在不调用super的情况下是这样。
标签: ruby-on-rails ruby devise cancan cancancan