gpt4 book ai didi

ruby-on-rails - 是否可以使用 graphql 的专家授权

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

我想做这样的事情:

authorize record, :some_action

解析 graphql 字段或突变(例如突变)

module Mutations::CreateLink
CreateLink = GraphQL::Relay::Mutation.define do
name "CreateLink"

input_field :name, types.String
input_field :url, types.String
input_field :description, types.String

return_field :link, Types::LinkType

resolve -> (object, inputs, ctx) {
Rails::logger.ap ctx[:current_user]
Rails::logger.ap inputs[:name]
ctx[:current_user]
@link = Link.new(name: inputs[:name], url: inputs[:url], description: inputs[:description])
authorize @link, :create?
response = {
link: @link
}
}
end
end

运行上面的代码时会显示此错误:NoMethodError - GraphQL::Relay::Mutation 无法定义“授权”

通常你写

include Pundit

在您的 Controller 中,但将其添加到 GraphqlController 中并没有任何区别。

我如何才能让 graphql 知道 pundit 及其方法?

最佳答案

include Pundit 不起作用的原因是,当您包含一个模块时,include 被添加到类中,而 authorize 方法无论如何都不起作用,因为它本来是包含在 Controller 中,并据此做出假设。

但是手动初始化策略真的很容易:

class ApplicationPolicy
attr_reader :user, :record

def initialize(user, record)
@user = user
@record = record
end
end

并且您可以通过调用策略上的适当方法来授权:

unless LinkPolicy.new(ctx[:current_user], @link).create?
raise Pundit::NotAuthorizedError, "not allowed to create? this #{@link.inspect}"
end

关于ruby-on-rails - 是否可以使用 graphql 的专家授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46239965/

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