【问题标题】:Facing issues while using cancan gem in rails4在 rails4 中使用 cancan gem 时面临的问题
【发布时间】:2015-05-27 10:37:21
【问题描述】:

您好,我是第一次使用 cancan gem。我已将其包含在我的 gem 文件中

gem 'cancancan', '~> 1.10'

然后完成捆绑安装并运行命令rails g cancan:ability,通过它生成我的ability.rb,我在其中给出了这个代码

class Ability
  include CanCan::Ability

  def initialize(employee)
    employee ||= Employee.new
    if employee[:role]== 'HR'
      can :manage, :all
    else
      can :read, :all
    end
  end
end

在我的 application_Controller 中给出这个

rescue_from CanCan::AccessDenied do |exception|
    flash[:error] = "Access denied."
    redirect_to root_url
 end

现在我用 employee[:role]= 'HR' 登录,当我要创建部门时,它给了我错误

NameError (undefined local variable or method `current_user' for #<DepartmentsController:0xb48a0c0>):
  vendor/ruby/2.1.0/gems/cancancan-1.10.1/lib/cancan/controller_additions.rb:357:in `current_ability'
  vendor/ruby/2.1.0/gems/cancancan-1.10.1/lib/cancan/controller_resource.rb:215:in `current_ability'
  vendor/ruby/2.1.0/gems/cancancan-1.10.1/lib/cancan/controller_resource.rb:98:in `initial_attributes'
  vendor/ruby/2.1.0/gems/cancancan-1.10.1/lib/cancan/controller_resource.rb:91:in `assign_attributes'
  vendor/ruby/2.1.0/gems/cancancan-1.10.1/lib/cancan/controller_resource.rb:86:in `build_resource'
  vendor/ruby/2.1.0/gems/cancancan-1.10.1/lib/cancan/controller_resource.rb:66:in `load_resource_instance'
  vendor/ruby/2.1.0/gems/cancancan-1.10.1/lib/cancan/controller_resource.rb:32:in `load_resource'
  vendor/ruby/2.1.0/gems/cancancan-1.10.1/lib/cancan/controller_resource.rb:25:in `load_and_authorize_resource'
  vendor/ruby/2.1.0/gems/cancancan-1.10.1/lib/cancan/controller_resource.rb:10:in `block in add_before_filter'

请指导我如何解决这个问题。提前致谢。

【问题讨论】:

  • 您有面向用户或员工的设计吗?还发布您的设计路线
  • 没有使用 authlogic
  • 您必须在 application_controller 中定义 current_user 辅助方法。对吗?
  • 您的应用程序控制器中是否有以下内容,例如helper_method :current_user private def current_user_session return @current_user_session if defined?(@current_user_session) @current_user_session = UserSession.find end def current_user @current_user = current_user_session &amp;&amp; current_user_session.record end

标签: ruby-on-rails rubygems cancan


【解决方案1】:

你必须重写 application_controller.rb 中的 current_ability 方法

def current_ability
   @current_ability ||= Ability.new(your_current_logged_in_employer_object)
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    • 2013-07-18
    相关资源
    最近更新 更多