Configurar el esquema
Configurar el esquemaConsultar campos de datos 'sensibles'

Consultar campos de datos 'sensibles'

El esquema GraphQL debe encontrar un equilibrio entre campos públicos y privados, para evitar exponer información privada en una API pública.

Por defecto, todos los campos del esquema GraphQL solo pueden acceder a datos públicos. Por ejemplo, posts solo puede recuperar entradas con estado "publish".

Además, podemos añadir campos de datos "sensibles" y campos de entrada al esquema, pensados para ser usados únicamente por el administrador, habilitados para un custom endpoint o persisted query específico, que también pueden obtener datos privados.

Por ejemplo, el argumento de campo posts(filter:) contendrá un input field adicional status, que nos permite recuperar entradas no publicadas (p. ej.: entradas con estado "pending", "draft" o "trash") para cualquier usuario. Del mismo modo, el esquema expondrá el campo Post.status, para visualizar este dato.

Lista de elementos de datos "sensibles"

Los elementos siguientes (entre otros) se tratan, por defecto, como datos privados:

User:

  • email
  • roles
  • capabilities
  • metaKeys

Custom Posts:

  • status
  • wpAdminEditURL
  • hasPassword
  • password
  • rawContent
  • rawTitle
  • rawExcerpt
  • metaKeys

Comments:

  • status
  • rawContent
  • metaKeys

Taxonomies:

  • metaKeys

Custom Post Mutations:

  • input authorBy

Menu Items:

  • rawTitle

Sobrescribir la configuración por defecto

Los elementos listados arriba pueden hacerse públicos.

En la página de Ajustes, en la pestaña correspondiente para cada uno, hay una casilla para configurar si tratarlos como "sensibles" o "normales":

Ajustes para tratar el email del usuario como datos 'sensibles'
Ajustes para tratar el email del usuario como datos 'sensibles'

Inspeccionar los elementos de datos "sensibles" mediante introspección del esquema

La propiedad isSensitiveDataElement se añade al campo extensions al hacer introspección del esquema. Para averiguar cuáles son los elementos de datos "sensibles" del esquema, ejecuta esta consulta:

query ViewSensitiveDataElements {
  __schema {
    types {
      name
      fields {
        name
        extensions {
          isSensitiveDataElement
        }
        args {
          name
          extensions {
            isSensitiveDataElement
          }
        }
      }
      inputFields {
        name
        extensions {
          isSensitiveDataElement
        }
      }
      enumValues {
        name
        extensions {
          isSensitiveDataElement
        }
      }
    }
  }
}

Y luego busca entradas con "isSensitiveDataElement": true en los resultados.

Añadir elementos de datos "sensibles" a los endpoints

La adición de elementos de datos "sensibles" al esquema puede configurarse de la siguiente manera, por orden de prioridad:

Modo específico para el custom endpoint o persisted query, definido en la configuración del esquema

Añadiendo elementos de datos sensibles al esquema, configurado en la Schema configuration

Modo por defecto, definido en los Ajustes

Si la configuración del esquema tiene el valor "Default", utilizará el modo definido en los Ajustes:

Configurando elementos de datos sensibles para la schema configuration, en los Ajustes
Configurando elementos de datos sensibles para la schema configuration, en los Ajustes

Cuándo usar

Úsalo siempre que esté permitido exponer información privada, como cuando construyes un sitio web estático, obteniendo datos de una instancia local de WordPress (es decir, no una API pública).