【发布时间】:2018-08-15 07:20:42
【问题描述】:
上下文
我有一个 GraphQL API 和一个 NodeJS 和 Angular 应用程序,以及一个包含用户的 MongoDB 数据库。对于每个用户,都有一个公共页面,其中包含 id 和 username 等公共信息。当用户登录时,会出现一个包含扩展信息的私人个人资料页面,例如 email。
就上下文而言,我使用jsonwebtoken 和accesscontrol 来验证和授权用户。该信息存储在每个 GraphQL 解析函数的 Context 中,因此可以使用识别登录用户所需的任何内容。
我有一个 GraphQL 查询,可以像这样检索公共用户:
query getUserById($id: ID!) {
getUserById(id: $id) {
id,
username
}
}
我正在尝试考虑检索公共用户或私人用户的正确实现。由于 GraphQL 是强类型的,我在想出一个合适的解决方案时遇到了一些麻烦。
问题
如何区分公共用户和私人用户?
注意事项
1.单独查询
因此,其中一种选择是对公共和私有字段进行单独查询:
公开查询
query getUserById($id: ID!) {
getUserById(id: $id) {
id,
username
}
}
私人查询
query getMe {
getMe {
id,
username,
email
}
}
2。使用 GraphQL 接口
我遇到了this Medium article,它解释了如何使用 GraphQL 接口基于resolveType 函数返回不同的类型。所以我会这样做:
query getUser($id: ID!) {
getUser(id: $id) {
... on UserPrivate {
id,
username
}
... on UserPublic {
id,
username,
email
}
}
}
我还没有找到合适的解决方案,我不确定我目前的任何考虑。
非常感谢任何帮助!
【问题讨论】:
标签: node.js graphql access-control graphql-js role-based-access-control