2012-02-12 22 views
9

Configuré ActiveAdmin al principio de mi proyecto y usé el modelo admin_users predeterminado para la autenticación. Desde entonces, he usado Devise para configurar un modelo de usuario diferente y me he dado cuenta de que probablemente sería mucho más inteligente fusionar las dos tablas, de modo que un administrador pueda tener acciones administrativas tanto en ActiveAdmin como en el front-end del sitio. ¿Cómo puedo configurar ActiveAdmin para usar el modelo de Usuarios con una columna para marcar a un administrador (por ejemplo, is_admin o presentar un nivel de permisos para hacer Administradores y Moderadores)?Fusionando usuarios de ActiveAdmin con el modelo de usuario existente

Rails 3.1 
ActiveAdmin 0.3.3 
Devise 1.4.9 

Respuesta

9

Para un bloque de código rápido de cómo hacer esto utilizando un modelo de "Usuario" existente con activeadmin, la respuesta es realmente muy fácil. En ApplicationController:

class ApplicationController < ActionController::Base 
    def authenticate_admin_user! #use predefined method name 
     redirect_to '/' and return if user_signed_in? && !current_user.is_admin? 
     authenticate_user! 
    end 
    def current_admin_user #use predefined method name 
     return nil if user_signed_in? && !current_user.is_admin? 
     current_user 
    end 
end 

Y simplemente use lo que Devise ya ha configurado para la autenticación. El redirect_to es el lugar donde desea enviar a los usuarios que están registrados y NO tienen privilegios administrativos.

4

ActiveAdmin, te dejamos define your own authentication methods. Puede migrar sus tablas de usuarios para tener una columna administrativa adicional y marcar los administradores existentes como tales en ella, luego configure sus métodos de autenticación (como se especifica) en config/initializers/active_admin.rb.

+0

+1 porque creo que me está dando la respuesta correcta. ¿Asumo que construyo el nuevo método en 'application_controller'? Pero, ¿qué tengo que hacer para integrar la autenticación actual de Devise sin anular las acciones existentes establecidas por el dispositivo? –

+0

Si los métodos existentes de Devise funcionan, puede pasarlos como símbolos a ActiveAdmin. De lo contrario, puede anularlos o definir nuevos métodos en algún lugar que tenga sentido para su aplicación ('ApplicationController' es un lugar bastante común). – coreyward

Cuestiones relacionadas