Ответ 1
В config/initializers/active_admin.rb
у вас есть такая конфигурация:
config.authentication_method = :authenticate_admin_user!
поэтому, если вы создадите метод с именем authenticate_admin_user! в ApplicationController, тогда ActiveAdmin проверяет, может ли пользователь перейти на страницы администратора или нет. Вот так:
# restrict access to admin module for non-admin users
def authenticate_admin_user!
raise SecurityError unless current_user.try(:admin?)
end
и спасение от этого исключения в ApplicationController (или вы действительно можете перенаправить внутри метода authenticate_admin_user!
)
rescue_from SecurityError do |exception|
redirect_to root_url
end
И еще одна маленькая вещь, если у вас нет admin_users, тогда было бы неплохо изменить эту строку в config/initializers/active_admin.rb
:
config.current_user_method = :current_user
И с помощью разработки вы можете сделать путь по умолчанию другим для пользователей admin/non-admin, поэтому вы можете определить метод after_sign_in_path_for
в контроллере
# 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