我試圖在權威策略中集中認證而不是在控制器中進行認證。它運行良好,但我在定製重定向和Flash消息方面失去了一些靈活性。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
我剛剛提到了一個定製評論的情況;添加自定義「重定向」路徑的情況經過必要的修改。 – geekazoid