Active Admin и Pundit — это мощные драгоценные камни Ruby, которые можно использовать вместе для реализации эффективной авторизации в приложениях Ruby on Rails. Active Admin предоставляет простой способ создания административных интерфейсов, а Pundit предлагает гибкий механизм авторизации. В этой статье мы рассмотрим семь различных методов интеграции Active Admin с Pundit, а также приведем примеры кода, демонстрирующие их использование.
-
Метод: настройка Active Admin с помощью Pundit
Для начала давайте установим необходимые драгоценные камни и настроим Active Admin для работы с Pundit. Добавьте следующие строки в свой Gemfile:gem 'activeadmin' gem 'pundit'
Затем запустите команду пакета, чтобы установить драгоценные камни:
bundle install
Далее сгенерируйте необходимые файлы конфигурации:
rails generate active_admin:install rails generate pundit:install
Это позволит настроить базовую конфигурацию как для Active Admin, так и для Pundit.
-
Метод: определение политик с помощью Pundit
Pundit использует политики, чтобы определить, имеет ли пользователь право выполнять определенные действия. Создайте файл политики для каждого ресурса Active Admin, который вы хотите авторизовать. Например, если у вас есть ресурс «Пользователь», создайте файл с именемuser_policy.rb
:class UserPolicy < ApplicationPolicy def index? user.admin? end def show? user.admin? || user == record end def create? user.admin? end # Define other actions... end
.
В приведенном выше примере мы определяем политики для действий индексирования, показа и создания. Настройте политики в соответствии с конкретными требованиями авторизации вашего приложения.
-
Метод: включение авторизации Pundit в Active Admin
Чтобы включить авторизацию Pundit в Active Admin, откройте файлapp/admin/resource.rb
и добавьте следующую строку:controller do include Pundit authorize_actions_for User end
Замените
User
на соответствующее имя ресурса. Это обеспечит применение политик Pundit для указанного ресурса в Active Admin. -
Метод: настройка сообщений об ошибках авторизации
Когда пользователь пытается получить доступ к ресурсу без надлежащей авторизации, Active Admin может отобразить настраиваемое сообщение об ошибке. Откройте файлapp/admin/resource.rb
и добавьте следующий метод:rescue_from Pundit::NotAuthorizedError do |exception| redirect_to admin_dashboard_path, alert: "You are not authorized to perform this action." end
Это перенаправит пользователя на панель администратора и отобразит указанное сообщение об ошибке.
-
Метод: условное отображение действий в Active Admin
Pundit позволяет условно показывать или скрывать действия на основе авторизации пользователя. Откройте файлapp/admin/resource.rb
и используйте методaction_item
для определения условных действий:action_item :edit, only: :show do link_to 'Edit', edit_admin_user_path(resource) if policy(resource).edit? end
В приведенном выше примере действие «Редактировать» будет отображаться только в том случае, если у пользователя есть права на редактирование ресурса.
-
Метод: определение области действия записей с помощью Pundit
Pundit позволяет определить политики области действия записей, чтобы ограничить записи, видимые пользователю. Откройте файлapp/admin/resource.rb
и используйте методscope_to
, чтобы определить область действия политики:controller do def scoped_collection super.accessible_by(current_ability) end end
Это гарантирует, что в Active Admin будут отображаться только записи, доступные текущему пользователю.
-
Метод: тестирование политик Pundit с помощью Active Admin
Pundit предоставляет удобный способ тестирования политик. Создайте папкуpolicies
в тестовом каталоге и добавьте файлы тестов политики. Например, для ресурса «Пользователь» создайте файл с именемuser_policy_test.rb
:class UserPolicyTest < ActiveSupport::TestCase def test_index assert_permit UserPolicy, users(:admin), User refute_permit UserPolicy, users(:regular_user), User end # Define other policy tests... end
.
В приведенном выше примере мы тестируем политику действий индекса, утверждая, что администратору разрешено, а обычному пользователю — нет.
Объединив Active Admin с Pundit, вы сможете добиться эффективной и настраиваемой авторизации в своих приложениях Ruby on Rails. Мы исследовали семь методов интеграции этих драгоценных камней, включая настройку Active Admin с Pundit, определение политик, включение авторизации, настройку сообщений об ошибках, условное отображение действий, определение области записей и политики тестирования. Используйте эти методы для создания безопасных и удобных административных интерфейсов для ваших приложений.