创建 API
创建 API定义访问控制

定义访问控制

我们可以通过访问控制列表来管理谁可以访问 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:访问被拒绝时的行为
单独的 Public/Private schema 模式
单独的 Public/Private schema 模式

描述访问控制列表

使用文档设置面板中的「Excerpt」字段,为访问控制列表添加描述。

更多信息请参阅指南为 API 添加描述

使用访问控制列表

创建 ACL 后,我们可以通过编辑相应的 schema 配置,并从「Access Control Lists」区块下的列表中选择该 ACL,使自定义端点或持久化 query 使用它。

在 Schema 配置中选择访问控制列表
在 Schema 配置中选择访问控制列表

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

在设置页面中选择默认访问控制列表