gpt4 book ai didi

ruby-on-rails-3.2 - 在 Pundit 策略中访问 session 参数

转载 作者:行者123 更新时间:2023-12-04 03:01:08 25 4
gpt4 key购买 nike

Pundit 策略似乎不访问 session 参数。 As 构造不会将 session 重新识别为有效的变量或方法。有没有办法访问 session 或其他参数?

class MyModelPolicy
def create?
@contructs = Construct.where(['id = ?', session[:construct_id]]).all
end
end

最佳答案

我是 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 的实例覆盖 pundit 使用的用户记录。类(class)。
class ApplicationController
include Pundit

def pundit_user
UserContext.new(current_user, session)
end
end

通过使您的应用程序策略接受上下文来完成。如果您想保持与旧策略的兼容,请将这些方法委托(delegate)给上下文。
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在您的政策中。

关于ruby-on-rails-3.2 - 在 Pundit 策略中访问 session 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20362459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com