我的应用程序需要三种用户类型(用户,代理,管理员)登录并需要不同的设计模块。
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处理AgentAdmin
和AdminUser
,使用不同的命名空间(AdminUser
的管理员,AgentAdmin
的代理)。我已为这两个命名空间配置了authentication_method
,current_user_method
和logout_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
路径?
答案 0 :(得分:13)
devise_for :agent_admins, ActiveAdmin::Devise.config.merge({path: '/agent'})
devise_for :admin_users, ActiveAdmin::Devise.config
ActiveAdmin.routes(self)
这解决了这个问题。