7

在这一点上,我一直在使用 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用清除宝石定义的)。但是,由于我没有找到其他有此问题的人,我想我一定错过了一些东西。

我不是在这个应用程序上设置许可的人,但我认为我们不会对它做任何会影响这一点的非标准行为。Clearance::Controller包含在ApplicationController. 无特殊定义current_user

配置/初始化程序/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
4

1 回答 1

15

您是正确的,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

如果您需要,我在这里创建了一个参考 repo进行比较。

于 2016-11-01T13:56:53.367 回答