Mengonfigurasi skema
Mengonfigurasi skemaMengquery field data "sensitif"

Mengquery field data "sensitif"

Skema GraphQL harus mencapai keseimbangan antara field publik dan privat, agar tidak mengekspos informasi privat dalam API publik.

Secara default, semua field dalam skema GraphQL hanya dapat mengakses data publik. Misalnya, posts hanya dapat mengambil postingan dengan status "publish".

Selain itu, kita dapat menambahkan field data "sensitif" dan input field ke dalam skema, yang dimaksudkan untuk digunakan oleh admin saja, diaktifkan untuk custom endpoint atau persisted query tertentu, yang juga dapat mengambil data privat.

Misalnya, argumen field posts(filter:) akan memuat input field tambahan status, yang memungkinkan kita mengambil postingan yang belum dipublikasikan (mis.: postingan dengan status "pending", "draft", atau "trash") untuk pengguna mana pun. Demikian pula, skema akan mengekspos field Post.status, untuk menampilkan data tersebut.

Daftar elemen data "sensitif"

Elemen-elemen berikut (di antaranya) diperlakukan sebagai data privat secara default:

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

Mengubah konfigurasi default

Elemen-elemen yang tercantum di atas dapat dijadikan publik.

Di halaman Settings, pada tab yang sesuai untuk masing-masing elemen, terdapat kotak centang untuk mengonfigurasi apakah akan memperlakukannya sebagai "sensitif" atau "normal":

Pengaturan untuk memperlakukan email pengguna sebagai data “sensitif”
Pengaturan untuk memperlakukan email pengguna sebagai data “sensitif”

Memeriksa elemen data "sensitif" melalui introspeksi skema

Properti isSensitiveDataElement ditambahkan ke field extensions saat melakukan introspeksi skema. Untuk mengetahui elemen data "sensitif" apa saja yang ada dalam skema, jalankan query ini:

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

Kemudian cari entri dengan "isSensitiveDataElement": true dalam hasilnya.

Menambahkan elemen data "sensitif" ke endpoint

Penambahan elemen data "sensitif" ke dalam skema dapat dikonfigurasi sebagai berikut, berdasarkan urutan prioritas:

âś… Mode spesifik untuk custom endpoint atau persisted query, yang ditentukan dalam konfigurasi skema

Menambahkan elemen data "sensitif" ke skema, diatur dalam Schema configuration

âś… Mode default, yang ditentukan dalam Settings

Jika konfigurasi skema memiliki nilai "Default", mode yang ditentukan dalam Settings akan digunakan:

Mengatur elemen data “sensitif” untuk konfigurasi skema, di Settings
Mengatur elemen data “sensitif” untuk konfigurasi skema, di Settings

Kapan digunakan

Gunakan setiap kali mengekspos informasi privat diizinkan, seperti saat membangun situs web statis, mengambil data dari instans WordPress lokal (yaitu bukan API publik).