Я пытаюсь централизовать аутентификацию в политике pundit вместо того, чтобы иметь ее в моих контроллерах. Он работает хорошо, но я потерял некоторую гибкость при настройке перенаправления и флэш-сообщения.Pundit: Пользовательское перенаправление внутри одного действия пользователя
Как я могу передать информацию о том, какая аутентификация не перешла на функцию спасения Pundit :: NotAuthorizedError? Одно действие может состоять из двух шагов аутентификации: 1. user.paid? 2. user.is_allowed_to_update? и я хочу, чтобы пользовательское сообщение и перенаправление для каждого случая.
Решение exception.query
не работает, поскольку оно позволяет настраивать вспышку и перенаправление для каждого действия, а не в течение одного действия.
Ниже приводится более подробное объяснением ситуации
WITHOUT PUNDIT
Comment_Controller
def update
if user.didnt_pay?
flash[:message] = nice_message
redirect_to payment_page_path
elsif user.is_not_allowed_to_perform_action
flash[:message] = less_nice_message
redirect_to dashboard_path
end
end
А теперь
WITH PUNDIT
Comment_Controller
def update
authorize @comment
end
Comment_policy
def update?
user.paid? && user_is_allowed_to_perform_action
end
ApplicationController
rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized
def user_not_authorized
flash[:message] = one_message_for_all_error # THIS IS WHAT I WANT TO CUSTOMIZE
redirect_to one_path_for_all_error # THIS IS WHAT I WANT TO CUSTOMIZE
end
Я только что упомянул случай индивидуального комментария; случай добавления пользовательского пути перенаправления следует mutatis mutandis. – geekazoid