Управление доступом
Предоставляет детальный доступ к схеме в зависимости от того, вошёл ли пользователь в систему (или нет), имеет ли определённую роль или возможность, и не только.
Описание
Это расширение позволяет создавать Списки управления доступом для управления тем, кто может обращаться к различным элементам (операциям, полям и директивам) схемы GraphQL.
На сайте добавляется новый Custom Post Type «Список управления доступом». Просматривать его записи можно на странице «Списки управления доступом» в меню, а для добавления новой записи нужно нажать «Добавить новый список управления доступом» в редакторе.


В редакторе указываются правила, которые должны выполняться для доступа к тем или иным элементам схемы: операциям (query или mutation), полям, глобальным полям и директивам.

Список управления доступом назначается нужному эндпоинту (приватному эндпоинту, единственному эндпоинту, пользовательским эндпоинтам или persisted queries) через Конфигурацию схемы.

При выполнении GraphQL-запроса, если он содержит какие-либо из выбранных элементов схемы из Списка управления доступом, производится оценка выбранных правил.
Если хотя бы одно правило не выполняется, доступ к данной операции, полю или директиве запрещается, и можно настроить способ формирования ответа 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
}
]
}
]
}Список правил управления доступом
Расширение предоставляет следующие правила управления доступом:
- Запретить доступ
- Предоставить доступ только если пользователь вошёл в систему или вышел из неё
- Предоставить доступ только если пользователь имеет определённую роль
- Предоставить доступ только если пользователь имеет определённую возможность