Как использовать Devise и ActiveAdmin для одной и той же модели пользователя? - программирование

Как использовать Devise и ActiveAdmin для одной и той же модели пользователя?

У меня ActiveAdmin и Devise работают с пользователями. Я хотел бы использовать Devise для входа в систему обычных пользователей, не являющихся администраторами, с той же моделью пользователя. Как я могу это сделать? (Я хочу иметь флаг admin в модели пользователя только для админов.) Я попытался добавить вторую строку в route.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

4b9b3361

Ответ 1

Я нашел этот http://dan.doezema.com/2012/02/how-to-implement-a-single-user-model-with-rails-activeadmin-and-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