Abfragen von 'sensiblen' Datenfeldern
Das GraphQL-Schema muss eine Balance zwischen öffentlichen und privaten Feldern finden, um zu vermeiden, dass private Informationen in einer öffentlichen API offengelegt werden.
Standardmäßig können alle Felder im GraphQL-Schema nur auf öffentliche Daten zugreifen. Zum Beispiel kann posts nur Beiträge mit dem Status "publish" abrufen.
Darüber hinaus können wir "sensible" Datenfelder und Input-Felder zum Schema hinzufügen, die nur vom Administrator genutzt werden sollen, für einen bestimmten Custom Endpoint oder eine Persisted Query aktiviert werden und auch private Daten abrufen können.
Zum Beispiel enthält das Feldargument posts(filter:) ein zusätzliches Input-Feld status, das es uns ermöglicht, nicht veröffentlichte Beiträge (z.B.: Beiträge mit dem Status "pending", "draft" oder "trash") für jeden Benutzer abzurufen. Ebenso wird das Schema das Feld Post.status bereitstellen, um diese Information anzuzeigen.
Liste der "sensiblen" Datenelemente
Die folgenden Elemente (unter anderem) werden standardmäßig als private Daten behandelt:
User:
emailrolescapabilitiesmetaKeys
Custom Posts:
statuswpAdminEditURLhasPasswordpasswordrawContentrawTitlerawExcerptmetaKeys
Comments:
statusrawContentmetaKeys
Taxonomies:
metaKeys
Custom Post Mutations:
- Input
authorBy
Menu Items:
rawTitle
Standardkonfiguration überschreiben
Die oben aufgeführten Elemente können öffentlich gemacht werden.
Auf der Einstellungsseite gibt es im entsprechenden Tab für jedes Element eine Checkbox, um festzulegen, ob es als "sensibel" oder "normal" behandelt werden soll:

Sensible Datenelemente per Schema-Introspektion prüfen
Die Eigenschaft isSensitiveDataElement wird dem Feld extensions bei der Schema-Introspektion hinzugefügt. Um herauszufinden, welche Elemente im Schema als "sensibel" gelten, führe diese Query aus:
query ViewSensitiveDataElements {
__schema {
types {
name
fields {
name
extensions {
isSensitiveDataElement
}
args {
name
extensions {
isSensitiveDataElement
}
}
}
inputFields {
name
extensions {
isSensitiveDataElement
}
}
enumValues {
name
extensions {
isSensitiveDataElement
}
}
}
}
}Suche anschließend in den Ergebnissen nach Einträgen mit "isSensitiveDataElement": true.
Sensible Datenelemente zu Endpoints hinzufügen
Das Hinzufügen von "sensiblen" Datenelementen zum Schema kann wie folgt konfiguriert werden, in der Reihenfolge der Priorität:
Spezifischer Modus für den Custom Endpoint oder die Persisted Query, definiert in der Schema-Konfiguration

Standardmodus, definiert in den Einstellungen
Wenn die Schema-Konfiguration den Wert "Default" hat, wird der in den Einstellungen definierte Modus verwendet:

Wann verwenden
Verwende dies immer dann, wenn das Offenlegen privater Informationen erlaubt ist, z.B. beim Erstellen einer statischen Website, bei der Daten von einer lokalen WordPress-Instanz abgerufen werden (d.h. keine öffentliche API).