我正在阅读 GraphQL 突变部分,我不明白context
这部分内容以及context[:current_user]
返回内容
这是示例代码:
class Mutations::PromoteEmployee < Mutations::BaseMutation
def ready?(**args)
# Called with mutation args.
# Use keyword args such as employee_id: or **args to collect them
if !context[:current_user].admin?
raise GraphQL::ExecutionError, "Only admins can run this mutation"
else
# Return true to continue the mutation:
true
end
end
# ...
end
Run Code Online (Sandbox Code Playgroud)
这是指南链接:https ://graphql-ruby.org/mutations/mutation_authorization.html
小智 7
您可以向 GraphQL 提供特定于应用程序的值作为 context:。这在很多地方都可用:
上下文的常见用途:包括当前用户或身份验证令牌。要提供 context: 值,请将哈希传递给 Schema#execute:
# graphql_controller.rb
context = {
current_user: session[:current_user],
current_organization: session[:current_organization],
}
MySchema.execute(query_string, context: context)
Run Code Online (Sandbox Code Playgroud)
然后,您可以在执行期间访问这些值:
field :post, Post, null: true do
argument :id, ID, required: true
end
def post(id:)
context[:current_user] # => #<User id=123 ... >
# ...
end
Run Code Online (Sandbox Code Playgroud)
请注意,上下文不是您传递给它的哈希值。它是 的一个实例{{ "GraphQL::Query::Context" | api_doc }}
,但它将#[]
、#[]=
和一些其他方法委托给您提供的哈希。