Access Control
Accordez un accès granulaire au schéma (selon que l’utilisateur est connecté, possède un rôle ou une capacité, ou par IP), pour gérer qui peut accéder à quelles données.

Click to watch tutorial video - 08:04
Définissez des listes de contrôle d'accès pour gérer l'accès granulaire à l'API pour vos utilisateurs.
Listes de contrôle d'accès
Cette extension nous permet de créer des listes de contrôle d'accès, pour gérer qui peut accéder aux différents éléments (opérations, champs et directives) du schéma GraphQL, en utilisant les règles suivantes :
- Désactiver l'accès
- Accorder l'accès uniquement si l'utilisateur est connecté ou déconnecté
- Accorder l'accès uniquement si l'utilisateur possède un certain rôle
- Accorder l'accès uniquement si l'utilisateur possède une certaine capacité
- Accorder l'accès uniquement si le visiteur provient d'une IP autorisée

Nous indiquons quelles règles doivent être satisfaites pour accéder à quels éléments du schéma, parmi les opérations, les champs, les champs globaux et les directives.
Lors de l'exécution d'une requête GraphQL, si elle contient l'un des éléments du schéma sélectionnés dans la liste de contrôle d'accès, les règles choisies sont évaluées.
Si une règle n'est pas satisfaite, l'accès à cette opération, ce champ ou cette directive est refusé.
Mode schéma public/privé
Lorsque l'accès à un champ ou à une directive est refusé via le contrôle d'accès, il existe 2 façons pour l'API de se comporter :
Mode public : Les champs du schéma sont exposés, et lorsque la permission n'est pas satisfaite, l'utilisateur reçoit un message d'erreur décrivant la raison pour laquelle la permission a été refusée. Ce comportement rend les métadonnées du schéma toujours disponibles.
Mode privé : Le schéma est personnalisé pour chaque utilisateur, contenant uniquement les champs disponibles pour lui ou elle, de sorte que lorsqu'on tente d'accéder à un champ interdit, le message d'erreur indique que le champ n'existe pas. Ce comportement expose les métadonnées du schéma uniquement aux utilisateurs qui peuvent y accéder.

Par exemple, en mode public, nous pourrions obtenir cette réponse :
{
"errors": [
{
"message": "You must have role 'author' to access field 'title' for type 'Post'",
"locations": [
{
"line": 86,
"column": 3
}
]
}
]
}Tandis qu'en mode privé, nous pourrions obtenir cette réponse :
{
"errors": [
{
"message": "There is no field 'title' on type 'Post'",
"locations": [
{
"line": 86,
"column": 3
}
]
}
]
}