Access Control
Conceda acesso granular ao schema (com base no usuário estar conectado, ter algum papel ou capacidade, ou por IP), para gerenciar quem pode acessar quais dados.

Click to watch tutorial video - 08:04
Defina Listas de Controle de Acesso para gerenciar o acesso granular à API para seus usuários.
Listas de Controle de Acesso
Esta extensão nos permite criar Listas de Controle de Acesso, para gerenciar quem pode acessar os diferentes elementos (operações, campos e directives) do schema GraphQL, usando as seguintes regras:
- Desabilitar o acesso
- Conceder acesso somente se o usuário estiver conectado ou desconectado
- Conceder acesso somente se o usuário tiver algum papel
- Conceder acesso somente se o usuário tiver alguma capacidade
- Conceder acesso somente se o visitante vier de um IP permitido

Indicamos quais regras devem ser satisfeitas para acessar quais elementos do schema, entre operações, campos, campos globais e directives.
Ao executar uma query GraphQL, se ela contiver algum dos elementos do schema selecionados na Lista de Controle de Acesso, as regras escolhidas serão avaliadas.
Se alguma regra não for satisfeita, o acesso a essa operação, campo ou directive será negado.
Modo de Schema Público/Privado
Quando o acesso a um campo ou directive é negado por meio do Controle de Acesso, há 2 maneiras de a API se comportar:
Modo público: Os campos no schema são expostos e, quando a permissão não é satisfeita, o usuário recebe uma mensagem de erro com uma descrição do motivo pelo qual a permissão foi rejeitada. Esse comportamento torna os metadados do schema sempre disponíveis.
Modo privado: O schema é personalizado para cada usuário, contendo apenas os campos disponíveis para ele ou ela, e assim, ao tentar acessar um campo proibido, a mensagem de erro informa que o campo não existe. Esse comportamento expõe os metadados do schema apenas para os usuários que podem acessá-los.

Por exemplo, no modo público, podemos obter esta resposta:
{
"errors": [
{
"message": "You must have role 'author' to access field 'title' for type 'Post'",
"locations": [
{
"line": 86,
"column": 3
}
]
}
]
}Enquanto no modo privado podemos obter esta resposta:
{
"errors": [
{
"message": "There is no field 'title' on type 'Post'",
"locations": [
{
"line": 86,
"column": 3
}
]
}
]
}