2012-02-23 9 views

Respuesta

38

En config/initializers/active_admin.rb que tienen tal configuración:

config.authentication_method = :authenticate_admin_user! 

por lo que si se crea un método denominado authenticate_admin_user! en ApplicationController, ActiveAdmin comprobará si el usuario puede ir a las páginas de administración o no. De esta manera:

# restrict access to admin module for non-admin users 
def authenticate_admin_user! 
    raise SecurityError unless current_user.try(:admin?) 
end 

y rescate de esa excepción en ApplicationController (o en realidad se puede redirigir dentro del método authenticate_admin_user!)

rescue_from SecurityError do |exception| 
    redirect_to root_url 
end 

Y una cosa más pequeña, si usted no tiene admin_users, a continuación, que sería bueno para cambiar esta línea en config/initializers/active_admin.rb:

config.current_user_method = :current_user 

Y con legado es posible que desee hacer la ruta predeterminada diferente para admin/Usuarios no administradores, por lo que puede definir after_sign_in_path_for método en el controlador

# path for redirection after user sign_in, depending on user role 
def after_sign_in_path_for(user) 
    user.admin? ? admin_dashboard_path : root_path 
end 
+0

Parece una buena solución, bu current_user parece no estar disponible dentro de ApplicationController ... ¿No puedo ponerlo en otro lugar? –

+0

mm controlador es en realidad el lugar donde más se usa. Entonces, ¿qué problema tienes, devuelve nil o NoMethodError? – alony

+0

Devuelve nil; 'método indefinido 'admin'? para nada: NilClass'. YO DEFINE el .admin? método, entonces eso no es todo. Encontré varios casos de current_user que no están disponibles en ApplicationControlller, parece que no debes acceder desde allí. –

0

Para usuarios "normales" debe escribir una lógica separada para iniciar sesión en el sitio o quizás no entendí por qué desea permitir que los usuarios inicien sesión a través del administrador activo. Administrador activo usando devise, solo crea otro modelo llamado User.

+0

No eso no es lo que quiero hacer, ya que los usuarios administradores deben ser capaces de usar la parte frontal del sitio también. Creo que es una buena práctica tener solo un modelo de usuario. –

Cuestiones relacionadas