Access Control
Otorga acceso granular al esquema (según el usuario haya iniciado sesión, tenga algún rol o capacidad, o por IP), para gestionar quién puede acceder a qué datos.

Click to watch tutorial video - 08:04
Define listas de control de acceso para gestionar el acceso granular a la API por parte de tus usuarios.
Listas de control de acceso
Esta extensión nos permite crear listas de control de acceso, para gestionar quién puede acceder a los distintos elementos (operaciones, campos y directivas) del esquema GraphQL, usando las siguientes reglas:
- Deshabilitar el acceso
- Conceder acceso solo si el usuario ha iniciado o cerrado sesión
- Conceder acceso solo si el usuario tiene algún rol
- Conceder acceso solo si el usuario tiene alguna capacidad
- Conceder acceso solo si el visitante proviene de una IP permitida

Indicamos qué reglas deben cumplirse para acceder a qué elementos del esquema, entre operaciones, campos, campos globales y directivas.
Al ejecutar una consulta GraphQL, si contiene alguno de los elementos del esquema seleccionados en la lista de control de acceso, se evalúan las reglas elegidas.
Si alguna regla no se cumple, se deniega el acceso a esa operación, campo o directiva.
Modo de esquema público/privado
Cuando se deniega el acceso a algún campo o directiva mediante el control de acceso, hay 2 formas en las que la API puede comportarse:
Modo público: Los campos del esquema están expuestos, y cuando no se cumple el permiso, el usuario recibe un mensaje de error con una descripción del motivo por el que se rechazó el permiso. Este comportamiento hace que los metadatos del esquema siempre estén disponibles.
Modo privado: El esquema se personaliza para cada usuario, conteniendo únicamente los campos disponibles para esa persona, por lo que al intentar acceder a un campo prohibido, el mensaje de error indica que el campo no existe. Este comportamiento expone los metadatos del esquema solo a los usuarios que pueden acceder a ellos.

Por ejemplo, en el modo público, podríamos obtener esta respuesta:
{
"errors": [
{
"message": "You must have role 'author' to access field 'title' for type 'Post'",
"locations": [
{
"line": 86,
"column": 3
}
]
}
]
}Mientras que en el modo privado podríamos obtener esta respuesta:
{
"errors": [
{
"message": "There is no field 'title' on type 'Post'",
"locations": [
{
"line": 86,
"column": 3
}
]
}
]
}