Как настроить политики авторизации для двух контроллеров с помощью Pundit?
Я изучаю Pundit, используя RailsApps Pundit Tutorial, и это утверждение из урока полностью смутило меня:
Учитывая, что объект политики называется UserPolicy, и мы будем использовать его для авторизации от контроллера Users, вы можете ошибочно предположить, что имя объекта политики всегда будет совпадать с именем контроллера. Это не относится к делу.
Как я могу создать политику (набор политик), которая позволяет пользователям с "role_a" использовать действие users_controller.index и пользователям с "role_b" использовать действие orders_controller.index?
1.1 Требуется ли для этого две разные политики (UserPolicy и OrderPolicy) или мне нужно по-разному называть действие индекса для каждого контроллера, чтобы дифференцировать его в UserPolicy?
1 ответ
Да, для этого требуются две разные политики (UserPolicy и OrderPolicy)
#user_policy.rb
class UserPolicy
attr_reader :current_user
def initialize(current_user)
@current_user = current_user
end
def index?
@current_user.role_a?
end
end
И в твоем index
метод users_controller
def index
@user = User.find(params[:id])
authorize @user
end
То же самое для OrderPolicy
#order_policy.rb
class OrderPolicy
attr_reader :current_user
def initialize(current_user)
@current_user = current_user
end
def index?
@current_user.role_b?
end
end
И в твоем index
метод orders_controller
def index
@user = User.find(params[:id])
authorize @user
end