Kontrola dostępu
Kontrola dostępuKontrola Dostępu

Kontrola Dostępu

Included in the “Power Extensions” bundle

Przyznaj szczegółowy dostęp do schematu na podstawie tego, czy użytkownik jest zalogowany (lub nie), posiada określoną rolę lub uprawnienie i nie tylko.

Opis

To rozszerzenie pozwala nam tworzyć Listy Kontroli Dostępu, aby zarządzać tym, kto może uzyskać dostęp do różnych elementów (operacji, pól i dyrektyw) schematu GraphQL.

Do witryny zostaje dodany nowy Custom Post Type „Lista Kontroli Dostępu". Możemy przeglądać jego wpisy na stronie „Listy Kontroli Dostępu" w menu i kliknąć „Dodaj Nową Listę Kontroli Dostępu", aby dodać nowy wpis w edytorze.

Listy Kontroli Dostępu
Listy Kontroli Dostępu
Edytor Listy Kontroli Dostępu
Edytor Listy Kontroli Dostępu

W edytorze wskazujemy, jakie reguły muszą być spełnione, aby uzyskać dostęp do określonych elementów schematu, spośród operacji (query lub mutation), pól, pól globalnych i dyrektyw.

Tworzenie Listy Kontroli Dostępu

Przypisujemy Listę Kontroli Dostępu do wybranego endpointu (prywatny endpoint, pojedynczy endpoint, niestandardowe endpointy lub persisted queries) za pomocą Konfiguracji Schematu.

Wybieranie Listy Kontroli Dostępu w Konfiguracji Schematu
Wybieranie Listy Kontroli Dostępu w Konfiguracji Schematu

Podczas wykonywania query GraphQL, jeśli zawiera ona którykolwiek z wybranych elementów schematu z Listy Kontroli Dostępu, wybrane reguły są oceniane.

Jeśli jakakolwiek reguła nie zostanie spełniona, dostęp do tej operacji, pola lub dyrektywy jest odmówiony, a my możemy skonfigurować, w jaki sposób API powinno zwrócić odpowiedź:

  • Tryb publiczny: Udostępnia użytkownikowi komunikat o błędzie wyjaśniający, dlaczego dostęp został odmówiony
  • Tryb prywatny: Komunikat o błędzie informuje, że operacja, pole lub dyrektywa nie istnieje

Na przykład w trybie publicznym możemy otrzymać taką odpowiedź:

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

Natomiast w trybie prywatnym możemy otrzymać taką odpowiedź:

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

Lista reguł Kontroli Dostępu

Rozszerzenie udostępnia następujące reguły Kontroli Dostępu:

  • Wyłącz dostęp
  • Przyznaj dostęp tylko wtedy, gdy użytkownik jest zalogowany lub wylogowany
  • Przyznaj dostęp tylko wtedy, gdy użytkownik posiada określoną rolę
  • Przyznaj dostęp tylko wtedy, gdy użytkownik posiada określone uprawnienie