定义访问控制
我们可以通过访问控制列表来管理谁可以访问 schema 中的每个字段和指令。
Gato GraphQL 附带以下访问控制规则:
- 禁止访问
- 如果用户已登录或已登出则授予访问权限
- 如果用户具有某个角色则授予访问权限
- 如果用户具有某项能力则授予访问权限
- 如果访问者来自允许的 IP 地址则授予访问权限
每当所请求的 query(无论是通过自定义端点执行还是作为持久化 query 执行)包含一个或多个已添加到访问控制列表的字段或指令时,相应的规则将被评估。如果任何规则未满足,则对该字段或指令的访问将被拒绝。
配置通过访问控制列表(ACL)创建,并通过 schema 配置应用到自定义端点和持久化 query。
访问所有访问控制列表
在插件菜单中点击「Access Control Lists」,将显示所有已创建的访问控制列表:

创建新的访问控制列表
点击「Add New Access Control List」按钮以打开 WordPress 编辑器:

为访问控制列表添加标题,添加包含操作、字段和指令的条目,配置适用的规则,并定义其可见性(公开或私有):

准备好后,点击 Publish 按钮。新的访问控制列表将在 schema 配置中可用。
访问控制条目
每个访问控制列表包含一个或多个条目,每个条目包含以下元素:
- 要授予或拒绝访问的操作
- 要授予或拒绝访问的字段
- 要授予或拒绝访问的指令
- 要验证的规则列表

从接口选择字段
除了从类型中选择字段外,我们还可以从接口中选择字段。在这种情况下,访问控制验证将在实现该接口的所有类型上执行。

公开/私有模式
如果「Public/Private Schema」模块已启用,当某个字段或指令的访问被拒绝时,API 有两种行为方式:
- 公开模式:向用户提供错误消息,说明访问被拒绝的原因
- 私有模式:错误消息表明该字段或指令不存在
如果此模块未启用,默认行为为公开。
细粒度公开/私有模式
如果「Public/Private Schema」模块的「Enable granular control?」选项为 on,条目将包含一个额外元素:
- Public/Private Schema:访问被拒绝时的行为

描述访问控制列表
使用文档设置面板中的「Excerpt」字段,为访问控制列表添加描述。
更多信息请参阅指南为 API 添加描述。
使用访问控制列表
创建 ACL 后,我们可以通过编辑相应的 schema 配置,并从「Access Control Lists」区块下的列表中选择该 ACL,使自定义端点或持久化 query 使用它。

如果不自定义配置,将使用设置页面「Access Control」选项卡中定义的默认访问控制列表:
