По-видимому, you can't access the params hash в политике штата. Имеет смысл, что они хотят представить как можно меньше информации в политику. Но один случай использования, с которым я столкнулся, который, я думаю, будет довольно распространенным, - проверить, что current_user
является пользователем из параметров.Pundit: Убедитесь, что current_user является пользователем из параметров
Так вот мое new
действия в моем контроллере:
class ReviewsController < ApplicationController
...
def new
@user = User.friendly.find(params[:user_id])
unless current_user.admin? || current_user.id == @user.id
flash[:alert] = 'Access denied.'
redirect_to root_url
end
@review = @user.reviews.build
end
...
end
Так вот, я хочу сказать, чтобы разрешить, если пользователь является администратором, или текущий пользователь является таким же, как тот, в URL. В противном случае пользователь с идентификатором 2 может перейти на /users/1/reviews/new
.
В этой политике, похоже, нет никакого способа справиться, потому что я не могу передать params[:user_id]
в политику.
Есть ли способ обработать эту схему авторизации из политики Pundit, а не обрабатывать логику auth в моем контроллере?