Access Control
Access Control访问控制

访问控制

Included in the “Power Extensions” bundle

根据用户的登录状态、角色、权限等,对 schema 进行精细化的访问授权。

说明

此扩展允许我们创建访问控制列表,管理哪些用户可以访问 GraphQL schema 中的各种元素(操作、字段和指令)。

站点中将新增一个「访问控制列表」Custom Post Type。可以在菜单中的「访问控制列表」页面浏览其条目,并点击「添加新的访问控制列表」在编辑器中添加新条目。

访问控制列表
访问控制列表
访问控制列表编辑器
访问控制列表编辑器

在编辑器中,我们从操作(querymutation)、字段、全局字段和指令中,指定访问相应 schema 元素所需满足的规则。

创建访问控制列表

通过 Schema 配置,将访问控制列表分配到所需的端点(私有端点、单一端点、自定义端点或 persisted queries)。

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

执行 GraphQL query 时,如果其中包含访问控制列表中所选的 schema 元素,则会对所选规则进行评估。

如果任何规则未被满足,对该操作、字段或指令的访问将被拒绝,并可配置 API 如何返回响应:

  • 公开模式:向用户提供错误消息,说明访问被拒绝的原因
  • 私有模式:错误消息显示该操作、字段或指令不存在

例如,在 公开模式 下,可能会返回以下响应:

{
  "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
        }
      ]
    }
  ]
}

访问控制规则列表

此扩展提供以下访问控制规则:

  • 禁用访问
  • 仅当用户已登录或已登出时才授予访问权限
  • 仅当用户具有特定角色时才授予访问权限
  • 仅当用户具有特定权限时才授予访问权限