配置 Schema
配置 Schema查询「敏感」数据字段

查询「敏感」数据字段

GraphQL 架构必须在公开字段和私有字段之间取得平衡,以避免在公开 API 中暴露私有信息。

默认情况下,GraphQL 架构中的所有字段只能访问公开数据。例如,posts 只能检索状态为 "publish" 的文章。

此外,我们可以向架构中添加「敏感」数据字段和输入字段,这些字段预期仅由管理员使用,针对特定的自定义端点或 persisted query 启用,同样可以获取私有数据。

例如,字段参数 posts(filter:) 将包含额外的输入字段 status,允许我们为任意用户检索未发布的文章(如状态为 "pending""draft""trash" 的文章)。同样,架构将公开字段 Post.status,以便查看该数据。

「敏感」数据元素列表

以下元素(及其他)默认被视为私有数据:

User:

  • email
  • roles
  • capabilities
  • metaKeys

Custom Posts:

  • status
  • wpAdminEditURL
  • hasPassword
  • password
  • rawContent
  • rawTitle
  • rawExcerpt
  • metaKeys

Comments:

  • status
  • rawContent
  • metaKeys

Taxonomies:

  • metaKeys

Custom Post Mutations:

  • authorBy 输入

Menu Items:

  • rawTitle

覆盖默认配置

上述元素可以被设置为公开。

在设置页面中,每个对应的选项卡里都有一个复选框,用于配置是否将其视为「敏感」或「普通」数据:

将用户邮箱视为「敏感」数据的设置
将用户邮箱视为「敏感」数据的设置

通过架构自省查看「敏感」数据元素

在执行架构自省时,isSensitiveDataElement 属性会被添加到字段 extensions 中。要从架构中找出哪些是「敏感」数据元素,请执行以下 query:

query ViewSensitiveDataElements {
  __schema {
    types {
      name
      fields {
        name
        extensions {
          isSensitiveDataElement
        }
        args {
          name
          extensions {
            isSensitiveDataElement
          }
        }
      }
      inputFields {
        name
        extensions {
          isSensitiveDataElement
        }
      }
      enumValues {
        name
        extensions {
          isSensitiveDataElement
        }
      }
    }
  }
}

然后在结果中搜索 "isSensitiveDataElement": true 的条目。

向端点添加「敏感」数据元素

向架构添加「敏感」数据元素的配置方式如下,按优先级顺序排列:

✅ 在架构配置中定义的、针对自定义端点或 persisted query 的特定模式

在架构配置中设置向架构添加「敏感」数据元素

✅ 在设置中定义的默认模式

如果架构配置的值为 "Default",则将使用设置中定义的模式:

在设置中为架构配置设置「敏感」数据元素
在设置中为架构配置设置「敏感」数据元素

使用场景

在允许公开私有信息的情况下使用,例如构建静态网站、从本地 WordPress 实例获取数据(即非公开 API)时。