Access Control
Предоставляйте детальный доступ к схеме (в зависимости от того, авторизован ли пользователь, имеет ли он роль или права, либо по IP), чтобы управлять тем, кто и к каким данным может получить доступ.

Click to watch tutorial video - 08:04
Определяйте списки контроля доступа для управления детальным доступом к API для ваших пользователей.
Списки контроля доступа
Это расширение позволяет нам создавать списки контроля доступа, чтобы управлять тем, кто может обращаться к различным элементам (операциям, полям и директивам) схемы GraphQL, используя следующие правила:
- Запретить доступ
- Предоставить доступ только если пользователь авторизован или нет
- Предоставить доступ только если пользователь имеет определённую роль
- Предоставить доступ только если пользователь имеет определённые права
- Предоставить доступ только если посетитель приходит с разрешённого IP

Мы указываем, какие правила должны быть выполнены для доступа к каким элементам схемы — из числа операций, полей, глобальных полей и директив.
При выполнении 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
}
]
}
]
}