2016-10-11 47 views
5

我一直在使用rails_admin v0.7.0和clearance gem成功達到這一點。我試圖今天將rails_admin更新爲v1.0,但我得到了一個未定義的變量或方法錯誤current_user。在v0.7.0中,似乎RailsAdmin::MainController繼承自ApplicationController,而在v1.0中它直接繼承自ActionController::Base,這可以解釋current_user現在是不確定的(我相信current_userApplicationController中與間隙寶石一起定義)。然而,由於我沒有發現任何其他人有這個問題,我想我一定是錯過了一些東西。'current_user'undefined在rails_admin中有許可權

我不是那個在這個應用程序中設置清除的人,但我認爲我們不會對它做任何不符合標準的事情,這會影響到這一點。 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 

回答

8

你是正確的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進行比較,如果你需要它。

+0

'rails_admin'問題的最佳答案。 –

+0

我需要這個與Rails 5應用程序中的Sorcery集成,謝謝! –

+0

我在這個問題上摔跤了*小時*。謝謝! – daybreaker