Skip to main content
 首页 » 编程设计

ruby-on-rails之使用 ActiveAdmin 处理多个管理员类型的登录

2025年12月25日24tintown

我有一个应用程序需要三种用户类型(用户、代理、管理员)并登录并需要不同的设计模块。

                        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 生成登录路径.
如果我设置 config.default_namespace = :agent在active_admin.rb 配置文件中, agent_admin 的登录路径已生成,但未生成 admin_users .

所有其他 ActiveAdmin 路径通常为这两个 namespace 生成。

我该如何解决,同时生成 login activedmin 处理的路径?

请您参考如下方法:

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

这解决了这个问题。