2013-10-16 4 views
5

Ho un'applicazione che richiede tre tipi di utente (utente, agente, amministratore) con accesso e che richiede diversi moduli di configurazione.Gestione di più di un tipo di accesso di accesso con 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 

Inoltre questi utenti possono disporre di colonne aggiuntive in base al loro tipo. Quindi, voglio creare tabelle diverse in base al loro tipo.

A seconda delle mie esigenze, ho deciso di gestire AgentAdmin e AdminUser con ActiveAdmin con diversi spazi dei nomi (admin AdminUser, agente per AgentAdmin). Ho configurato authentication_method, current_user_method e logout_link_path per entrambi questi spazi dei nomi come di seguito.

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 

Ho il seguente codice nel mio routes.rb:

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

Questo genera percorsi di accesso solo per admin_users. Se si imposta config.default_namespace = :agent nel file di configurazione active_admin.rb, viene generato il percorso di accesso per agent_admin, ma non admin_users.

Tutti gli altri percorsi ActiveAdmin vengono generati normalmente per entrambi gli spazi dei nomi.

Come posso risolvere, per generare entrambi i percorsi login gestiti da activedmin?

risposta

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

Questo ha risolto il problema.

Problemi correlati