我有一个ActiveAdmin实例,以前只为我的公司用户提供Admin。我们需要客户来管理其他一些模型。在activeadmin部分,它看起来很简单。我刚刚创建了一个单独的命名空间,它起作用当我尝试创建两个不同的登录端点时,事情变得复杂。
这是我的routes.rb文件:
scope '/admin' do
devise_for :admin_users, ActiveAdmin::Devise.config
devise_for :client_admins, ActiveAdmin::Devise.config
ActiveAdmin.routes(self)
end
问题是:activeadmin使用默认命名空间(admin_users的命名空间)来生成路由。有没有办法在没有覆盖并为client_admins编写自己的auth控制器的情况下执行此操作?
答案 0 :(得分:3)
这是可能的。
的routes.rb
Rails.application.routes.draw do
devise_for :admin_users, ActiveAdmin::Devise.config
devise_for :teachers, ActiveAdmin::Devise.config.merge(:path => :admin)
ActiveAdmin.routes(self)
root 'application#root'
end
配置/初始化/ active_admin.rb
ActiveAdmin.setup do |config|
config.site_title = "Admin"
config.default_namespace = :superadmin
config.namespace :superadmin 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 :admin do |admin|
admin.authentication_method = :authenticate_teacher!
admin.current_user_method = :current_teacher
admin.logout_link_path = :destroy_teacher_session_path
admin.root_to = 'dashboard#index'
end
end
Rails 5.0.0.1,Devise 4.2.0,ActiveAdmin 1.0.0.pre4
答案 1 :(得分:1)
我认为不可能:Using Devise with multiple namespaces for the same Model
我会使用rolify和cancancan来创建:admin
和:client
角色。