Подтвердить что ты не робот

Как ограничить доступ к активному администратору для пользователей admin

Я хочу, чтобы только мои пользователи, у которых есть свой атрибут is_admin, установлены в true, чтобы иметь возможность доступа к моему активному бэкэнду администратора

как мне это сделать?

"Нормальные" пользователи должны иметь возможность входа на сайт, а не для активного администратора.

4b9b3361

Ответ 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

Ответ 2

Для "обычных" пользователей вы должны написать отдельную логику для входа на сайт или, может быть, я не понимаю, почему вы хотите разрешить пользователям входить в систему через активного администратора. Активный администратор, используя devise, просто создайте еще одну модель под названием Пользователь.