У меня есть модуль авторизации, который я создал для авторизации действий пользователя.Все работает отлично, за исключением того, что теперь я хочу пропустить действие, если пользователь, запрашивающий страницу, является текущим пользователем.Ресурс вложен ниже user
, поэтому передается :user_id
как часть параметров.
Из того, что я смог выяснить, самый простой способ сделать это - использовать лямбду, но не похоже, что у меня есть доступ к переданным параметрам из фильтра before.
Это мой контроллер
class Certifications::FitnessController < ApplicationController
prepend_before_action :authenticate_user!
before_action :authorize, unless: -> { params[:user_id] == current_user.id }
end
Проблема в том, что :authorize
before_action никогда не вызывается, поэтому все действия разрешены (я полагаю, потому что выражение "Always" всегда оценивается как true), но яне могу понять, что происходит, потому что, если я остановлю выполнение там, никакие параметры не появятся там (что, я думаю, должно сделать его всегда ложным, не истинным).
Если кто-то может сказать мне либочто я делаю неправильно или лучший способ реализации, я был бы очень признателен.
РЕДАКТИРОВАТЬ: Код выше на самом деле работает, если вы преобразуете параметры в целое число, чтобы соответствовать current_user.id
before_action :authorize, unless: -> { params[:user_id].to_i == current_user.id }