想象一下,我有一个名为“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 个参数)