'current_user' 在 rails_admin 中未定义,有间隙

'current_user' undefined in rails_admin with clearance

到目前为止,我一直在使用 rails_admin v0.7.0 并获得许可 gem。我今天尝试将 rails_admin 更新到 v1.0,但收到 current_user 的未定义变量或方法错误。在 v0.7.0 中,RailsAdmin::MainController 似乎继承自 ApplicationController,而在 v1.0 中,它直接继承自 ActionController::Base,这将解释 current_user 现在未定义(我相信 current_userApplicationController 中定义,间隙为 gem)。但是,由于我没有发现其他人有这个问题,我想我一定是遗漏了什么。

我不是在这个应用程序上设置许可的人,但我不认为我们正在做任何会影响它的非标准操作。 Clearance::Controller 包含在 ApplicationController 中。 current_user.

没有特殊定义

config/initializers/rails_admin.rb

RailsAdmin.config do |config|

  # Popular gems integration

  ## Clearance
  config.authorize_with do |controller|
    unless current_user.admin?
      redirect_to(
        main_app.root_path,
        alert: "You are not permitted to view this page"
      )
    end
  end

  config.current_user_method { current_user }
end

您是正确的,Rails Admin 默认继承自 ::ActionController::Base,这就是导致您出现问题的原因。幸运的是,修复很简单。添加 config.parent_controller = "::ApplicationController"config/initializers/rails_admin.rb:

RailsAdmin.config do |config|

  ## == Clearance ==
  config.parent_controller = "::ApplicationController"

  config.authorize_with do |controller|
    unless current_user && current_user.admin?
      redirect_to(
        main_app.root_path,
        alert: "You are not permitted to view this page"
      )
    end
  end

  # You actually don't need this line    
  # config.current_user_method { current_user }
end

我创建了一个 reference repo here 供您比较,如果您需要的话。