2011-09-14 10 views
11

Agregué una función de administrador a Devise agregando un atributo de administrador.Diseñar before_filter authenticate_admin?

¿Me podría decir si este es el camino correcto para crear un before_filter que requiere un usuario administrador para ser firmado:

en cualquier controlador:

before_filter :authenticate_admin! 

en application_controller

protected 
    unless current_user.try(:admin?)  
    redirect_to :new_user_session_path  
    end 

Respuesta

22

Ir con este enfoque

before_filter :authenticate_user! 
    before_filter do 
    redirect_to new_user_session_path unless current_user && current_user.admin? 
    end 

Esto también garantiza que los invitados se vean obligados a iniciar sesión también. No es necesario modificar el método predeterminado para forzar la autenticación sólo para acceder al método de instancia admin?

def admin? 
    self.admin == true 
end 

Mi enfoque es crear un atributo de papel y comprobar su valor de cadena contra un conjunto de funciones destinadas - Es mucho más flexible de esta manera en lugar de tener que crear muchos atributos booleanos.

+0

Gracias. Lo intentaré más tarde. –

+0

De nada =) –

+1

¿No necesita definir admin ?, si la columna admin ya es un booleano, puede llamar a user.admin? y devolverá verdadero o falso automáticamente sin tener un administrador? método en usuario. – n0denine

1

Mirando la respuesta anterior (por Michael De Silva), tuve un problema con el código que utilizó. Escribió la ruta como un símbolo (:new_user_session_path), pero necesitaba que fuera un asistente de ruta normal (new_user_session_path). Hasta que cambié esto, recibía errores y decía que la ruta no era válida. (Estoy corriendo Rails 5.)

Espero que esto sea útil para los demás!