如何将 Devise 和 ActiveAdmin 用于同一用户模型?
How do I use Devise and ActiveAdmin for the same User model?
我有 ActiveAdmin 和 Devise 与用户一起工作。我想使用 Devise 以相同的用户模型登录普通的非管理员用户。我怎样才能做到这一点? (我想在用户模型中有一个仅供管理员使用的 admin
标志。)我尝试将第二行添加到 routes.rb
devise_for :users, ActiveAdmin::Devise.config
devise_for :users
但是当我尝试列出路由时出现错误
>rake routes
DL is deprecated, please use Fiddle
rake aborted!
ArgumentError: Invalid route name, already in use: 'new_user_session'
You may have defined two routes with the same name using the `:as` option, or you may be overriding a route already defined by a resource with the same naming. For the latter, you can restrict the routes created with `resources` as explained here:
http://guides.rubyonrails.org/routing.html#restricting-the-routes-created
我创建了一个授权适配器,它只检查 user.admin == true
并且对于 ActiveAdmin 工作正常。 https://github.com/activeadmin/activeadmin/blob/master/docs/13-authorization-adapter.md
但我最终还是这样做了
Devise 3.4.1
ActiveAdmin 1.0.0.pre1
Rails 4.2.1
routes.rb
devise_for :admin_users, {class_name: 'User'}.merge(ActiveAdmin::Devise.config)
ActiveAdmin.routes(self)
devise_for :users
resources :users
application_controller.rb
def access_denied(exception)
redirect_to root_path, alert: exception.message
end
config/initializers/active_admin.rb
config.authorization_adapter = ActiveAdminAdapter
config.on_unauthorized_access = :access_denied
(并将所有方法从 _user
更改为 admin_user
。)
app/models/active_admin_adapter.rb
class ActiveAdminAdapter < ActiveAdmin::AuthorizationAdapter
def authorized?(action, subject = nil)
user.admin == true
end
end
和
rails generate migration add_admin_to_users admin:boolean
我有 ActiveAdmin 和 Devise 与用户一起工作。我想使用 Devise 以相同的用户模型登录普通的非管理员用户。我怎样才能做到这一点? (我想在用户模型中有一个仅供管理员使用的 admin
标志。)我尝试将第二行添加到 routes.rb
devise_for :users, ActiveAdmin::Devise.config
devise_for :users
但是当我尝试列出路由时出现错误
>rake routes
DL is deprecated, please use Fiddle
rake aborted!
ArgumentError: Invalid route name, already in use: 'new_user_session'
You may have defined two routes with the same name using the `:as` option, or you may be overriding a route already defined by a resource with the same naming. For the latter, you can restrict the routes created with `resources` as explained here:
http://guides.rubyonrails.org/routing.html#restricting-the-routes-created
我创建了一个授权适配器,它只检查 user.admin == true
并且对于 ActiveAdmin 工作正常。 https://github.com/activeadmin/activeadmin/blob/master/docs/13-authorization-adapter.md
但我最终还是这样做了
Devise 3.4.1
ActiveAdmin 1.0.0.pre1
Rails 4.2.1
routes.rb
devise_for :admin_users, {class_name: 'User'}.merge(ActiveAdmin::Devise.config)
ActiveAdmin.routes(self)
devise_for :users
resources :users
application_controller.rb
def access_denied(exception)
redirect_to root_path, alert: exception.message
end
config/initializers/active_admin.rb
config.authorization_adapter = ActiveAdminAdapter
config.on_unauthorized_access = :access_denied
(并将所有方法从 _user
更改为 admin_user
。)
app/models/active_admin_adapter.rb
class ActiveAdminAdapter < ActiveAdmin::AuthorizationAdapter
def authorized?(action, subject = nil)
user.admin == true
end
end
和
rails generate migration add_admin_to_users admin:boolean