2015-05-15 37 views
12

Ho ActiveAdmin e Devise che lavorano con gli utenti. Vorrei utilizzare Devise per accedere regolarmente a utenti non amministratori con lo stesso modello utente. Come posso fare questo? (Voglio avere una bandiera admin nel modello d'uso solo per gli amministratori.) Ho provato ad aggiungere il 2 ° linea per routes.rbCome utilizzare Devise e ActiveAdmin per lo stesso modello utente?

devise_for :users, ActiveAdmin::Devise.config 
devise_for :users 

ma ha dato un errore quando ho provato a elencare i percorsi

>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 

Ho creato un adattatore di autorizzazione che controlla solo user.admin == true e che funziona correttamente per ActiveAdmin. https://github.com/activeadmin/activeadmin/blob/master/docs/13-authorization-adapter.md

risposta

16

ho trovato questo http://dan.doezema.com/2012/02/how-to-implement-a-single-user-model-with-rails-activeadmin-and-devise/

ma ho finito per fare questo

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 

(E cambiando tutti i metodi da _user-admin_user.)

app/models/active_admin_adapter.rb
class ActiveAdminAdapter < ActiveAdmin::AuthorizationAdapter 
    def authorized?(action, subject = nil) 
    user.admin == true 
    end 
end 

E

rails generate migration add_admin_to_users admin:boolean 
+1

Risposta stupenda .. Davvero molto utile. – SSR