Access Control
Concedi accesso granulare allo schema (in base al fatto che l'utente sia connesso, abbia un ruolo o una capacità, o per IP), per gestire chi può accedere a quali dati.

Click to watch tutorial video - 08:04
Definisci liste di controllo degli accessi per gestire l'accesso granulare all'API per i tuoi utenti.
Liste di controllo degli accessi
Questa estensione ci consente di creare liste di controllo degli accessi, per gestire chi può accedere ai diversi elementi (operazioni, campi e direttive) dello schema GraphQL, utilizzando le seguenti regole:
- Disabilitare l'accesso
- Concedere l'accesso solo se l'utente è connesso o disconnesso
- Concedere l'accesso solo se l'utente ha un determinato ruolo
- Concedere l'accesso solo se l'utente ha una determinata capacità
- Concedere l'accesso solo se il visitatore proviene da un IP consentito

Indichiamo quali regole devono essere soddisfatte per accedere a quali elementi dello schema, tra operazioni, campi, campi globali e direttive.
Quando si esegue una query GraphQL, se contiene uno degli elementi dello schema selezionati nella lista di controllo degli accessi, le regole scelte vengono valutate.
Se una regola non è soddisfatta, l'accesso a quell'operazione, campo o direttiva viene negato.
Modalità schema pubblico/privato
Quando l'accesso a un campo o a una direttiva viene negato tramite il controllo degli accessi, esistono 2 modi in cui l'API può comportarsi:
Modalità pubblica: I campi dello schema sono esposti e, quando il permesso non è soddisfatto, l'utente riceve un messaggio di errore con una descrizione del motivo per cui il permesso è stato rifiutato. Questo comportamento rende i metadati dello schema sempre disponibili.
Modalità privata: Lo schema è personalizzato per ogni utente, contenendo solo i campi disponibili per lui o lei, e quindi quando si tenta di accedere a un campo vietato, il messaggio di errore indica che il campo non esiste. Questo comportamento espone i metadati dello schema solo agli utenti che possono accedervi.

Ad esempio, in modalità pubblica, potremmo ottenere questa risposta:
{
"errors": [
{
"message": "You must have role 'author' to access field 'title' for type 'Post'",
"locations": [
{
"line": 86,
"column": 3
}
]
}
]
}Mentre in modalità privata potremmo ottenere questa risposta:
{
"errors": [
{
"message": "There is no field 'title' on type 'Post'",
"locations": [
{
"line": 86,
"column": 3
}
]
}
]
}