如何将服务器端的筛选器强制用于graphql查询?

如何将服务器端的筛选器强制用于graphql查询?,graphql,nestjs,prisma-graphql,graphql-tools,Graphql,Nestjs,Prisma Graphql,Graphql Tools,假设我有一个名为“users”的查询,它返回所有用户,这些用户可以与一个或多个公司关联,因此我有一个usercompanys类型(我需要它,因为它保存了关系之外的更多信息)。我使用的是Prisma,我需要强制执行一个过滤器,该过滤器只返回与请求者属于同一公司的用户。 我从JWT获得了公司的信息,需要在将其发送给Prisma之前将其注入查询 所以,查询应该是这样的: query allUsers { users { name id status email

假设我有一个名为“users”的查询,它返回所有用户,这些用户可以与一个或多个公司关联,因此我有一个usercompanys类型(我需要它,因为它保存了关系之外的更多信息)。我使用的是Prisma,我需要强制执行一个过滤器,该过滤器只返回与请求者属于同一公司的用户。 我从JWT获得了公司的信息,需要在将其发送给Prisma之前将其注入查询

所以,查询应该是这样的:

query allUsers {
  users {
    name
    id
    status
    email
    userCompanies{
      id
      role
    }
  }
}
在服务器端,我应该将其转换为:(用户where是ok,只是更改args)

我看到了一些解决方案,但我不知道这是否是最好的方法: 1-使用addFragmentToInfo,可以在查询上设置条件,但是如果查询已经设置了UserCompanys,则会产生冲突。否则,它可以正常工作。 2-我可以使用别名进行查询,但在DB结果之后,我需要编辑数组中的所有结果以覆盖结果。 3-不要在js中使用Prisma和filter的信息。
4-GraphqlResolveInfo类型的Edit info(第4个参数)

很抱歉,问题不在于如何获取id,而在于如何将收到的查询编辑为带有筛选器的查询。但是谢谢!您可以检查
addFragmentToInfo
是否需要使用(UserCompanys是否已请求,检查是否已提供id匹配-验证)-无冲突?是的,我可以检查是否提供,但如果提供,则不符合where条件。因此,当我通过addFragmentInfo创建它时,它会导致冲突。您可以将
companyId
users
传递到
usercompanys
解析器。。。您可以检查它是否存在于父参数中并使用它。。。与现有参数(用户id)合并/替换它们。。。。如果仍然没有足够的更精确的枚举用例?问题是,在使用Prisma时,您不需要通过解析程序传递属性,您只需传递一个带有嵌套值的信息来获取,Prisma就可以处理所有问题。通过扩展graphql绑定包的“addFragmentToInfo”,我最终得到了一个解决方案,我将做一些更改,然后在这里发布。谢谢对不起,问题不在于如何获取id,而在于如何使用过滤器将收到的查询编辑为该查询。但是谢谢!您可以检查
addFragmentToInfo
是否需要使用(UserCompanys是否已请求,检查是否已提供id匹配-验证)-无冲突?是的,我可以检查是否提供,但如果提供,则不符合where条件。因此,当我通过addFragmentInfo创建它时,它会导致冲突。您可以将
companyId
users
传递到
usercompanys
解析器。。。您可以检查它是否存在于父参数中并使用它。。。与现有参数(用户id)合并/替换它们。。。。如果仍然没有足够的更精确的枚举用例?问题是,在使用Prisma时,您不需要通过解析程序传递属性,您只需传递一个带有嵌套值的信息来获取,Prisma就可以处理所有问题。通过扩展graphql绑定包的“addFragmentToInfo”,我最终得到了一个解决方案,我将做一些更改,然后在这里发布。非常感谢。
query allUsers {
  users(where: {
    userCompanies_some: {
      companyId: "companyId-from-jwt"
    }
  }) {
    name
    id
    status
    email
    userCompanies(where: {
      companyId: "companyId-from-jwt"
    }){
      id
      role
    }
  }
}