我有这样的查询:
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",
}
}
]
}
一个用户可以访问多个组织,但每个组织的访问权限不同。
当解析fieldA
和fieldB
以验证访问时,我需要有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
感谢