Я являюсь автором Pundit. Политики по умолчанию имеют доступ только к текущему пользователю и к записи, для которой вы проверяете разрешения.
Вы можете использовать context pattern defined in the Pundit docs. Начните с создания класса пользовательского контекста в вашем каталоге app/model
, который примет все необходимые вам контекстуальные параметры, в данном случае session
.
class UserContext
attr_reader :user, :session
def initialize(user, session)
@user = user
@session = session
end
end
Затем вы можете изменить запись пользователя, используемый пандитом с экземпляром вашего UserContext
класса.
class ApplicationController
include Pundit
def pundit_user
UserContext.new(current_user, session)
end
end
Завершите свою политику при принятии условий. Если вы хотите оставаться в соответствии с вашими старыми политиками, делегируйте эти методы в контекст.
class ApplicationPolicy
attr_reader :context, :user, :session
def initialize(context, record)
@context = context
@record = record
end
delegate :user, to: :context
delegate :session, to: :context
...
end
Теперь вы можете получить доступ к session
в своих правилах.
Адрес электронной почты: Где эта линия в вашем коде? Контроллер? – basgys
Извините, пропустил ваш комментарий. Строка будет в ModelName_policy.rb. – Jerome