Я сотрудничаю с Pundit. Политики по умолчанию имеют доступ только к текущему пользователю и записи, для которой вы проверяете разрешения.
Вы можете использовать шаблон контекста, определенный в документации Pundit. Начните с создания класса пользовательского контекста в вашем каталоге app/model
, принимающего все необходимые вам контекстные параметры, в данном случае session
.
class UserContext
attr_reader :user, :session
def initialize(user, session)
@user = user
@session = session
end
end
Затем вы можете переопределить запись пользователя, используемую pundit, экземпляром вашего класса 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
внутри ваших политик.
person
zeeraw
schedule
15.01.2015