Konfigurowanie schematu
Konfigurowanie schematuOdpytywanie pól danych 'wrażliwych'

Odpytywanie pól danych 'wrażliwych'

Schemat GraphQL musi zachować równowagę między polami publicznymi a prywatnymi, aby uniknąć ujawniania prywatnych informacji w publicznym API.

Domyślnie wszystkie pola schematu GraphQL mogą uzyskiwać dostęp wyłącznie do danych publicznych. Na przykład posts może pobierać tylko posty o statusie "publish".

Ponadto możemy dodać do schematu pola danych "wrażliwych" oraz pola wejściowe, przeznaczone wyłącznie do użytku przez administratora, włączone dla konkretnego custom endpointu lub persisted query, które mogą również pobierać prywatne dane.

Na przykład argument pola posts(filter:) będzie zawierał dodatkowe pole wejściowe status, które pozwala nam pobierać niepublikowane posty (np. posty o statusie "pending", "draft" lub "trash") dla dowolnego użytkownika. Podobnie schemat udostępni pole Post.status, aby umożliwić wizualizację tych danych.

Lista elementów danych "wrażliwych"

Poniższe elementy (między innymi) są domyślnie traktowane jako dane prywatne:

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

Nadpisywanie domyślnej konfiguracji

Elementy wymienione powyżej mogą zostać upublicznione.

Na stronie Ustawień, w odpowiedniej zakładce dla każdego z nich, znajduje się pole wyboru umożliwiające skonfigurowanie, czy traktować je jako "wrażliwe" czy "normalne":

Ustawienia umożliwiające traktowanie adresu e-mail użytkownika jako danych 'wrażliwych'
Ustawienia umożliwiające traktowanie adresu e-mail użytkownika jako danych 'wrażliwych'

Sprawdzanie elementów danych "wrażliwych" za pomocą introspekcji schematu

Właściwość isSensitiveDataElement jest dodawana do pola extensions podczas introspekcji schematu. Aby sprawdzić, które elementy danych schematu są "wrażliwe", wykonaj tę query:

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

Następnie wyszukaj wpisy z "isSensitiveDataElement": true w wynikach.

Dodawanie elementów danych "wrażliwych" do endpointów

Dodawanie elementów danych "wrażliwych" do schematu można skonfigurować w następujący sposób, w kolejności priorytetu:

Tryb specyficzny dla custom endpointu lub persisted query, zdefiniowany w konfiguracji schematu

Dodawanie elementów danych wrażliwych do schematu, skonfigurowane w Schema configuration

Tryb domyślny, zdefiniowany w Ustawieniach

Jeśli konfiguracja schematu ma wartość "Default", zostanie użyty tryb zdefiniowany w Ustawieniach:

Konfiguracja elementów danych wrażliwych dla schema configuration w Ustawieniach
Konfiguracja elementów danych wrażliwych dla schema configuration w Ustawieniach

Kiedy używać

Używaj zawsze, gdy dozwolone jest ujawnianie prywatnych informacji, na przykład podczas budowania statycznej strony internetowej, pobierania danych z lokalnej instancji WordPress (tj. nie publicznego API).