使用ActiveAdmin处理多个管理类型登录

时间:2013-10-16 08:55:58

标签: ruby-on-rails devise 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

此外,这些用户可能会根据其类型添加其他列。所以,我想根据类型创建不同的表。

根据我的要求,我决定使用ActiveAdmin处理AgentAdminAdminUser,使用不同的命名空间(AdminUser的管理员,AgentAdmin的代理)。我已为这两个命名空间配置了authentication_methodcurrent_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处理的activedmin路径?

1 个答案:

答案 0 :(得分:13)

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

这解决了这个问题。