Zugriffskontrolle
ZugriffskontrolleZugriffskontrolle

Zugriffskontrolle

Included in the “Power Extensions” bundle

Gewähre granularen Zugriff auf das Schema, je nachdem ob der Benutzer eingeloggt ist (oder nicht), eine bestimmte Rolle oder Berechtigung hat, und mehr.

Beschreibung

Diese Erweiterung ermöglicht es uns, Zugriffskontrolllisten zu erstellen, um zu verwalten, wer auf die verschiedenen Elemente (Operationen, Felder und Direktiven) des GraphQL-Schemas zugreifen kann.

Dem System wird ein neuer Custom Post Type „Zugriffskontrollliste" hinzugefügt. Wir können die Einträge auf der Seite „Zugriffskontrolllisten" im Menü durchsuchen und auf „Neue Zugriffskontrollliste hinzufügen" klicken, um einen neuen Eintrag im Editor anzulegen.

Zugriffskontrolllisten
Zugriffskontrolllisten
Editor der Zugriffskontrollliste
Editor der Zugriffskontrollliste

Im Editor geben wir an, welche Regeln erfüllt sein müssen, um auf welche Schema-Elemente zuzugreifen – aus den Operationen (query oder mutation), Feldern, globalen Feldern und Direktiven.

Erstellen einer Zugriffskontrollliste

Wir weisen die Zugriffskontrollliste dem gewünschten Endpoint (privater Endpoint, einzelner Endpoint, benutzerdefinierte Endpoints oder persisted queries) über die Schema-Konfiguration zu.

Auswahl einer Zugriffskontrollliste in der Schema-Konfiguration
Auswahl einer Zugriffskontrollliste in der Schema-Konfiguration

Bei der Ausführung einer GraphQL-query werden die ausgewählten Regeln ausgewertet, wenn die query eines der in der Zugriffskontrollliste ausgewählten Schema-Elemente enthält.

Wenn eine Regel nicht erfüllt ist, wird der Zugriff auf die jeweilige Operation, das Feld oder die Direktive verweigert, und wir können konfigurieren, wie die API die Antwort liefern soll:

  • Öffentlicher Modus: Dem Benutzer wird eine Fehlermeldung angezeigt, die erklärt, warum der Zugriff verweigert wird
  • Privater Modus: Die Fehlermeldung gibt an, dass die Operation, das Feld oder die Direktive nicht existiert

Im öffentlichen Modus könnte die Antwort zum Beispiel so aussehen:

{
  "errors": [
    {
      "message": "You must have role 'author' to access field 'title' for type 'Post'",
      "locations": [
        {
          "line": 86,
          "column": 3
        }
      ]
    }
  ]
}

Im privaten Modus hingegen könnte diese Antwort erscheinen:

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

Liste der Zugriffskontrollregeln

Die Erweiterung stellt folgende Zugriffskontrollregeln bereit:

  • Zugriff deaktivieren
  • Zugriff nur gewähren, wenn der Benutzer ein- oder ausgeloggt ist
  • Zugriff nur gewähren, wenn der Benutzer eine bestimmte Rolle hat
  • Zugriff nur gewähren, wenn der Benutzer eine bestimmte Berechtigung hat