Access Control
根据用户的登录状态、角色或权限,或 IP 地址,授予对 schema 的细粒度访问权限,管理谁可以访问哪些数据。

Click to watch tutorial video - 08:04
定义访问控制列表,管理用户对 API 的细粒度访问权限。
访问控制列表
此扩展允许创建访问控制列表,使用以下规则管理谁可以访问 GraphQL schema 中的不同元素(操作、字段和指令):
- 禁用访问
- 仅当用户已登录或已登出时授予访问权限
- 仅当用户拥有某个角色时授予访问权限
- 仅当用户拥有某个权限时授予访问权限
- 仅当访客来自允许的 IP 时授予访问权限

我们在操作、字段、全局字段和指令中指定访问哪些 schema 元素需要满足哪些规则。
执行 GraphQL query 时,如果其中包含访问控制列表中所选的任何 schema 元素,则会对所选规则进行评估。
如果任何规则未被满足,则对该操作、字段或指令的访问将被拒绝。
公开/私有 Schema 模式
当通过访问控制拒绝对某个字段或指令的访问时,API 有两种行为方式:
公开模式:schema 中的字段是公开的,当权限不满足时,用户会收到一条错误消息,说明权限被拒绝的原因。此行为使 schema 的元数据始终可用。
私有模式:schema 针对每个用户进行定制,仅包含该用户可访问的字段,因此当尝试访问被禁止的字段时,错误消息会提示该字段不存在。此行为仅向有权访问的用户公开 schema 的元数据。

例如,在 公开模式 下,我们可能会得到如下响应:
{
"errors": [
{
"message": "You must have role 'author' to access field 'title' for type 'Post'",
"locations": [
{
"line": 86,
"column": 3
}
]
}
]
}而在 私有模式 下,我们可能会得到如下响应:
{
"errors": [
{
"message": "There is no field 'title' on type 'Post'",
"locations": [
{
"line": 86,
"column": 3
}
]
}
]
}