2014-11-24 78 views
4

在我的Rails應用程序網站中,訪問者可以註冊並創建內容。它使用設計與用戶模型,一切運作良好。Rails_admin:我應該擁有admin_user還是具有admin角色的用戶來管理用戶和管理面板

現在我想使用rails_admin來管理網站資源和用戶等,只有具有管理預錄的人才能夠訪問它。

我應該爲管理面板訪問創建一個單獨的AdminUser模型,還是使用角色爲admin的用戶模型,並使用某個授權庫來管理訪問權限。

如果我用戶只有一個模型,那麼我希望用戶在登錄後重定向到管理面板,如果用戶是管理員,如果沒有,那麼我希望用戶被重定向到他們的個人資料。並且哪個授權庫cancan或pundit將是 更適合我的情況。

謝謝!

回答

4

好問題。我在我的項目中使用Rails Admin和Pundit。

我更喜歡將Admin模型與User模型分開。

其中一個原因是我喜歡能夠從Rails Admin「成爲用戶」,以便在出現問題時能夠幫助他們。當您擁有單獨的用戶和管理員模型時,更容易做到這一點。

管理模式可以非常簡單。與 rails generate devise Admin

然後在你的config/initializers/rails_admin.rb生成它添加

config.authenticate_with do 
    warden.authenticate! :scope => :admin 
end 

config.current_user_method(&:current_admin) 

重定向到正確的配置文件,此方法添加到您的ApplicationController

def after_sign_in_path_for(resource) 
    if resource.class == Administrator 
    rails_admin_path 
    else 
    # Change profile_path to where you want regular users to go 
    stored_location_for(resource) || profile_path 
    end 
end 

爲了防止從目前的註銷管理員從當前用戶註銷時,在config/initializers/devise.rb

中設置此配置
config.sign_out_all_scopes = false 

爲了解決您的其他問題,我使用了CanCan和Pundit。我更喜歡Pundit,因爲CanCan會爲每個請求評估所有權限。藉助Pundit,只有在需要時才能檢查權限。根據我的經驗,專家也更加靈活。

+0

@Monkbroc嗨只是好奇你是如何實現的權威人士多用戶類(如:管理員和用戶) – jufemaiz 2015-05-12 00:59:39

+0

當然@jufemaiz。你可以發表一個關於多個模型的專家的問題,我會回答嗎? – monkbroc 2015-05-13 01:46:01

+0

會做@monkbroc – jufemaiz 2015-05-13 02:31:30

0

補充monkbroc答案:

對於我來說,在回報率4,變量:admin和:current_admin從來沒有工作過。看到有關該問題的一些頁面,是不是監獄長在註冊時設計的角色是不是一個模式,而是一個枚舉...,發現這樣的另一種解決方案:

config.authorize_with do |controller| 
    unless current_user.try(:admin?) 
    flash[:error] = "You are not an admin" 
    redirect_to 'visitors#index' 
end 
end 

代碼來自這個其他答案:Authenticate using Devise and Rails Admin for particular routes

相關問題