2013-10-16 34 views
5

我有一個應用程序需要三個用戶類型(用戶,代理,管理員)登錄並需要不同的設計模塊。使用ActiveAdmin處理多個管理類型登錄

     User AgentAdmin AdminUser 

confirmable    Yes  Yes   No 
lockable     Yes  Yes   No 
timeoutable    No  Yes   Yes 
Omniauthable    Yes  No   No 
database_authenticatable Yes  Yes   Yes 
recoverable    Yes  Yes   No 
rememberable    Yes  Yes   No 
trackable    Yes  Yes   Yes 
validatable    Yes  Yes   Yes 

此外,這些用戶可能會根據其類型添加其他列。所以,我想根據它們的類型創建不同的表格。

根據我的要求,我決定來處理AgentAdminAdminUserActiveAdmin有不同的命名空間(管理員爲AdminUser,代理AgentAdmin)。我已經爲這兩個命名空間配置了authentication_method,current_user_methodlogout_link_path,如下所示。

config.load_paths = [File.join(Rails.root,'app','admin'), File.join(Rails.root,'app','agent')] 

config.namespace :admin do |admin| 
    admin.authentication_method = :authenticate_admin_user! 
    admin.current_user_method = :current_admin_user 
    admin.logout_link_path = :destroy_admin_user_session_path 
end 

config.namespace :agent do |agent| 
    agent.authentication_method = :authenticate_agent_admin! 
    agent.current_user_method = :current_agent_admin 
    agent.logout_link_path = :destroy_agent_admin_session_path 
end 

我在routes.rb下面的代碼:

devise_for :agent_admins, ActiveAdmin::Devise.config 
devise_for :admin_users, ActiveAdmin::Devise.config 
ActiveAdmin.routes(self) 

這僅適用於admin_users產生登錄路徑。 如果我在active_admin.rb配置文件中設置了config.default_namespace = :agent,將生成agent_admin的登錄路徑,但不生成admin_users

所有其他ActiveAdmin路徑通常爲兩個名稱空間生成。

我該如何解決,同時生成處理的login路徑?

回答

10
devise_for :agent_admins, ActiveAdmin::Devise.config.merge({path: '/agent'}) 
devise_for :admin_users, ActiveAdmin::Devise.config 
ActiveAdmin.routes(self) 

這解決了這個問題。