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
Parece una buena solución, bu current_user parece no estar disponible dentro de ApplicationController ... ¿No puedo ponerlo en otro lugar? –
mm controlador es en realidad el lugar donde más se usa. Entonces, ¿qué problema tienes, devuelve nil o NoMethodError? – alony
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í. –