2013-10-16 14 views
5

Ich habe eine Anwendung erfordert drei User-Typen (Benutzer, Agent, Admin) mit Login und erfordern verschiedene Geräte-Module.Umgang mit mehr als einem Admin-Typ Login mit 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 

Weitere diese Benutzer möglicherweise zusätzliche Spalten basierend auf ihrem Typ. Daher möchte ich verschiedene Tabellen basierend auf ihrem Typ erstellen.

Je nach meinen Anforderungen, entschied ich mich (für AdminUser, Mittel für AgentAdmin admin) AgentAdmin und AdminUser mit ActiveAdmin mit unterschiedlichen Namensräumen zu behandeln. Ich habe authentication_method, current_user_method und logout_link_path für diese Namespaces wie folgt konfiguriert.

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 

Ich habe den folgenden Code in meinem routes.rb:

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

Diese für admin_users nur Login Pfade erzeugt. Wenn ich config.default_namespace = :agent in der Konfigurationsdatei active_admin.rb festlege, wird der Anmeldepfad für agent_admin generiert, aber nicht admin_users.

Alle anderen ActiveAdmin-Pfade werden normalerweise für beide Namespaces generiert.

Wie kann ich lösen, um beide login Pfade zu erzeugen, die von activedmin behandelt werden?

Antwort

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

Dies löste das Problem.