首页 > 解决方案 > 如何强制服务器端的过滤器到 graphql 查询?

问题描述

想象一下,我有一个名为“users”的查询,它返回所有用户并且这些用户可以与一个或多个公司相关联,所以我有一个 UserCompanies 类型(我需要它,因为它保存了关系之外的更多信息)。我正在使用 Prisma,我需要强制一个过滤器只返回与请求者属于同一公司的用户。我从 JWT 获得公司的信息,需要在将其发送到 Prisma 之前将其注入到查询中。

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

query allUsers {
  users {
    name
    id
    status
    email
    userCompanies{
      id
      role
    }
  }
}

在服务器端,我应该将其转换为:(用户可以,只需更改参数)

query allUsers {
  users(where: {
    userCompanies_some: {
      companyId: "companyId-from-jwt"
    }
  }) {
    name
    id
    status
    email
    userCompanies(where: {
      companyId: "companyId-from-jwt"
    }){
      id
      role
    }
  }
}

我看到了一些解决方案,但我不知道这是否是最好的方法: 1 - 使用 addFragmentToInfo,完成对查询设置条件的工作,但如果查询已经设置了用户公司,它给出我一个冲突。否则,它工作正常。2 - 我可以为查询使用别名,但在 DB 结果之后,我需要编辑数组中的所有结果以覆盖结果。3 - 不要在 Prisma 上使用信息并在 js 中过滤。4 - 编辑 GraphqlResolveInfo 类型的信息(第 4 个参数)

标签: graphqlnestjsprisma-graphqlgraphql-tools

解决方案


推荐阅读