Настройка схемы
Настройка схемыЗапрос «чувствительных» полей данных

Запрос «чувствительных» полей данных

Схема GraphQL должна соблюдать баланс между публичными и приватными полями, чтобы не раскрывать личную информацию в публичном API.

По умолчанию все поля схемы GraphQL могут обращаться только к публичным данным. Например, posts может получать только записи со статусом "publish".

Кроме того, можно добавить в схему «чувствительные» поля данных и поля ввода, предназначенные исключительно для администратора, включённые для конкретного custom endpoint или persisted query, которые также могут получать приватные данные.

Например, аргумент поля posts(filter:) будет содержать дополнительное input field 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:

  • input authorBy

Menu Items:

  • rawTitle

Переопределение конфигурации по умолчанию

Перечисленные выше элементы могут быть сделаны публичными.

На странице настроек, на соответствующей вкладке для каждого из них, есть флажок, позволяющий указать, следует ли считать их «чувствительными» или «обычными»:

Настройки для обозначения email пользователя как «чувствительных» данных
Настройки для обозначения email пользователя как «чувствительных» данных

Просмотр «чувствительных» элементов данных через интроспекцию схемы

Свойство isSensitiveDataElement добавляется к полю extensions при выполнении интроспекции схемы. Чтобы узнать, какие элементы данных в схеме являются «чувствительными», выполните этот запрос:

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

Затем найдите в результатах записи с "isSensitiveDataElement": true.

Добавление «чувствительных» элементов данных к endpoints

Добавление «чувствительных» элементов данных в схему настраивается следующим образом, в порядке приоритета:

✅ Конкретный режим для custom endpoint или persisted query, заданный в конфигурации схемы

Добавление «чувствительных» элементов данных в схему, настроенное в Schema configuration

✅ Режим по умолчанию, заданный в настройках

Если конфигурация схемы имеет значение "Default", будет использоваться режим, определённый в настройках:

Настройка «чувствительных» элементов данных для конфигурации схемы в параметрах
Настройка «чувствительных» элементов данных для конфигурации схемы в параметрах

Когда использовать

Используйте всякий раз, когда допускается раскрытие приватной информации, — например, при создании статического сайта, получающего данные из локального экземпляра WordPress (то есть не через публичный API).