Configurer le schéma
Configurer le schémaInterroger les champs de données 'sensibles'

Interroger les champs de données 'sensibles'

Le schéma GraphQL doit trouver un équilibre entre les champs publics et privés, afin d'éviter d'exposer des informations privées dans une API publique.

Par défaut, tous les champs du schéma GraphQL ne peuvent accéder qu'à des données publiques. Par exemple, posts ne peut récupérer que des articles avec le statut "publish".

De plus, nous pouvons ajouter des champs de données "sensibles" et des champs d'entrée au schéma, destinés à être utilisés uniquement par l'administrateur, activés pour un custom endpoint ou une persisted query spécifique, qui peuvent également récupérer des données privées.

Par exemple, l'argument de champ posts(filter:) contiendra un input field supplémentaire status, qui nous permet de récupérer des articles non publiés (p. ex. : articles avec le statut "pending", "draft" ou "trash") pour n'importe quel utilisateur. De même, le schéma exposera le champ Post.status, pour visualiser cette donnée.

Liste des éléments de données "sensibles"

Les éléments ci-dessous (entre autres) sont, par défaut, traités comme des données privées :

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

Remplacer la configuration par défaut

Les éléments listés ci-dessus peuvent être rendus publics.

Dans la page des Réglages, dans l'onglet correspondant pour chacun, il y a une case à cocher pour configurer s'il faut les traiter comme "sensibles" ou "normaux" :

Réglages pour traiter l'email de l'utilisateur comme des données 'sensibles'
Réglages pour traiter l'email de l'utilisateur comme des données 'sensibles'

Inspecter les éléments de données "sensibles" via l'introspection du schéma

La propriété isSensitiveDataElement est ajoutée au champ extensions lors de l'introspection du schéma. Pour découvrir quels sont les éléments de données "sensibles" du schéma, exécutez cette requête :

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

Puis recherchez les entrées avec "isSensitiveDataElement": true dans les résultats.

Ajouter des éléments de données "sensibles" aux endpoints

L'ajout d'éléments de données "sensibles" au schéma peut être configuré comme suit, par ordre de priorité :

Mode spécifique pour le custom endpoint ou la persisted query, défini dans la configuration du schéma

Ajout d'éléments de données sensibles au schéma, configuré dans la Schema configuration

Mode par défaut, défini dans les Réglages

Si la configuration du schéma a la valeur "Default", elle utilisera le mode défini dans les Réglages :

Configuration des éléments de données sensibles pour la schema configuration, dans les Réglages
Configuration des éléments de données sensibles pour la schema configuration, dans les Réglages

Quand utiliser

Utilisez-le chaque fois qu'il est permis d'exposer des informations privées, par exemple lors de la construction d'un site web statique, en récupérant des données depuis une instance WordPress locale (c'est-à-dire pas une API publique).