如何在graphqlruby中修改子字段的上下文



我有这样的查询:

query {
organizations {
id
name
itemA {
fieldA
fieldB
}
}
}

返回

"data": {
"organizations": [
{
"id": 123, 
"name": "first org",
"itemA": {
"fieldA": "some value A",
"fieldB": "other value B",
}
},
{
"id": 321, 
"name": "other org",
"itemA": {
"fieldA": "other value A",
"fieldB": "value B",
}
}
]
}

一个用户可以访问多个组织,但每个组织的访问权限不同。

当解析fieldAfieldB以验证访问时,我需要有organization.id。

我尝试在解析程序中使用context.merge_scoped!(organiozation_id: org.id)来解析一个字段,该字段返回单个组织。看起来它做了我需要的,子字段在context中收到了正确的值,但我不确定。没有关于该方法和scoped_context的一般文档。

此外,如果scoped_context是我需要的,我如何为项目列表设置它?


UPD:样本查询

query {
organizations { // I need to pass item of this list to resolver of ItemA
someModel{
otherModel {
itemA // access depened on organization`
}
}
}
}

该功能在较新版本中进行了记录:https://graphql-ruby.org/queries/executing_queries.html#scoped-上下文

我不能100%确定我解决了你的问题,但我认为你需要的应该是"透明的";到GQL。

你需要两件事来正确地列出";项目";对于一个组织:1。哪个组织和2。谁在问:

# type organization
def itemA
object # this is 1, the organization, current node in the graph
.get_fields_accessible_by(context[:who_is_asking]) # this is requirement 2
end

正如您所看到的,似乎根本没有理由操纵上下文。(除非我完全没有抓住要点,否则请随时修改你的问题以澄清(。

你能试试吗:

context[:organisation] = object #set this value in your organisation model

使用current[:organisation]在另一个模型中访问它

此外,您可以创建辅助方法

类似的东西

def current_organisation
context[:current_organisation]
end

感谢

相关内容

  • 没有找到相关文章

最新更新