Создание API
Создание APIОпределение управления доступом

Определение управления доступом

Мы можем управлять тем, кто имеет доступ к каждому полю и директиве в схеме, с помощью списков управления доступом.

Gato GraphQL поставляется со следующими правилами управления доступом:

  • Запрет доступа
  • Предоставление доступа, если пользователь авторизован или не авторизован
  • Предоставление доступа, если пользователь имеет определённую роль
  • Предоставление доступа, если пользователь имеет определённые возможности
  • Предоставление доступа, если посетитель приходит с разрешённого IP-адреса

Когда запрошенный query (выполняемый через пользовательский endpoint или как persisted query) содержит одно или несколько полей или директив, добавленных в список управления доступом, соответствующие правила оцениваются. Если какое-либо правило не выполняется, доступ к этому полю или директиве запрещается.

Конфигурация создаётся с помощью списка управления доступом (ACL) и передаётся пользовательским endpoints и persisted queries через конфигурацию схемы.

Просмотр всех списков управления доступом

При нажатии на «Access Control Lists» в меню плагина отображается список всех созданных списков управления доступом:

Списки управления доступом в панели администратора
Списки управления доступом в панели администратора

Создание нового списка управления доступом

Нажмите кнопку «Add New Access Control List», чтобы открыть редактор WordPress:

Создание списка управления доступом

Задайте название списку управления доступом, добавьте записи с операциями, полями и директивами, настройте применяемые к ним правила и определите их видимость (публичная или приватная):

Создание списка управления доступом

Когда всё готово, нажмите кнопку Publish. После этого новый список управления доступом станет доступен для конфигурации схемы.

Записи управления доступом

Каждый список управления доступом содержит одну или несколько записей, каждая из которых включает следующие элементы:

  • Операции, к которым предоставляется или запрещается доступ
  • Поля, к которым предоставляется или запрещается доступ
  • Директивы, к которым предоставляется или запрещается доступ
  • Список правил для проверки

Запись управления доступом

Выбор полей из интерфейсов

Помимо полей из типов, можно также выбирать поля из интерфейсов. В этом случае проверка управления доступом выполняется для всех типов, реализующих данный интерфейс.

Выбор поля из интерфейса
Выбор поля из интерфейса

Публичный/приватный режим

Если модуль «Public/Private Schema» включён, при запрете доступа к какому-либо полю или директиве API может вести себя двумя способами:

  • Публичный режим: пользователю предоставляется сообщение об ошибке с указанием причины отказа в доступе
  • Приватный режим: сообщение об ошибке указывает на то, что поле или директива не существует

Если этот модуль не включён, поведение по умолчанию — публичное.

Гранулярный публичный/приватный режим

Если опция «Enable granular control?» модуля «Public/Private Schema» включена (on), запись содержит дополнительный элемент:

  • Публичная/приватная схема: поведение при запрете доступа
Индивидуальный режим публичной/приватной схемы
Индивидуальный режим публичной/приватной схемы

Описание списка управления доступом

Используйте поле «Excerpt» на панели настроек документа, чтобы добавить описание к списку управления доступом.

Дополнительную информацию можно найти в руководстве Добавление описания к API.

Использование списка управления доступом

После создания ACL можно настроить Custom Endpoint или Persisted Query для его использования, отредактировав соответствующую конфигурацию схемы и выбрав ACL из списка в блоке «Access Control Lists».

Выбор списка управления доступом в конфигурации схемы
Выбор списка управления доступом в конфигурации схемы

Если конфигурация не настроена, будут использованы списки управления доступом по умолчанию, определённые на странице настроек во вкладке «Access Control»:

Выбор списков управления доступом по умолчанию на странице настроек