Access Control
Access ControlControl de Acceso

Control de Acceso

Included in the “Power Extensions” bundle

Concede acceso granular al esquema en función de si el usuario ha iniciado sesión (o no), tiene un rol o capacidad determinada, y mucho más.

Descripción

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.

Se añade al sitio un nuevo Custom Post Type "Lista de Control de Acceso". Podemos ver sus entradas en la página "Listas de Control de Acceso" del menú, y hacer clic en "Añadir Nueva Lista de Control de Acceso" para añadir una nueva entrada en el editor.

Listas de Control de Acceso
Listas de Control de Acceso
Editor de Lista de Control de Acceso
Editor de Lista de Control de Acceso

En el editor indicamos qué reglas deben cumplirse para acceder a qué elementos del esquema, de entre operaciones (query o mutation), campos, campos globales y directivas.

Creando una Lista de Control de Acceso

Asignamos la Lista de Control de Acceso al endpoint deseado (endpoint privado, endpoint único, endpoints personalizados o persisted queries) mediante la Configuración del Esquema.

Seleccionando una Lista de Control de Acceso en la Configuración del Esquema
Seleccionando una Lista de Control de Acceso en la Configuración del Esquema

Al ejecutar una consulta GraphQL, si contiene cualquiera 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, y podemos configurar cómo debe proporcionar la respuesta la API:

  • Modo público: Proporcionar un mensaje de error al usuario, indicando por qué se deniega el acceso
  • Modo privado: El mensaje de error indica que la operación, campo o directiva no existe

Por ejemplo, en el modo público, podemos 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 podemos obtener esta respuesta:

{
  "errors": [
    {
      "message": "There is no field 'title' on type 'Post'",
      "locations": [
        {
          "line": 86,
          "column": 3
        }
      ]
    }
  ]
}

Lista de reglas de Control de Acceso

La extensión proporciona las siguientes reglas de Control de Acceso:

  • Deshabilitar 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