Cấu hình schema
Cấu hình schemaTruy vấn các trường dữ liệu “nhạy cảm”

Truy vấn các trường dữ liệu “nhạy cảm”

Lược đồ GraphQL phải cân bằng giữa các trường công khai và riêng tư, nhằm tránh lộ thông tin cá nhân trong một API công khai.

Theo mặc định, tất cả các trường trong lược đồ GraphQL chỉ có thể truy cập dữ liệu công khai. Ví dụ, posts chỉ có thể lấy các bài viết có trạng thái "publish".

Ngoài ra, chúng ta có thể thêm các trường dữ liệu "nhạy cảm" và các input field vào lược đồ, dự kiến chỉ dành cho quản trị viên sử dụng, được bật cho một custom endpoint hoặc persisted query cụ thể, đồng thời có thể lấy dữ liệu riêng tư.

Ví dụ, đối số posts(filter:) sẽ chứa thêm một input field status, cho phép chúng ta lấy các bài viết chưa được xuất bản (ví dụ: các bài viết có trạng thái "pending", "draft" hoặc "trash") cho bất kỳ người dùng nào. Tương tự, lược đồ sẽ hiển thị trường Post.status để xem dữ liệu này.

Danh sách các phần tử dữ liệu "nhạy cảm"

Các phần tử dưới đây (trong số những phần tử khác) theo mặc định được coi là dữ liệu riêng tư:

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

Ghi đè cấu hình mặc định

Các phần tử liệt kê ở trên có thể được công khai hóa.

Trong trang Cài đặt, ở tab tương ứng cho từng phần tử, có một hộp kiểm để cấu hình xem có nên coi chúng là "nhạy cảm" hay "bình thường":

Cài đặt để coi email người dùng là dữ liệu “nhạy cảm”
Cài đặt để coi email người dùng là dữ liệu “nhạy cảm”

Kiểm tra các phần tử dữ liệu "nhạy cảm" qua schema introspection

Thuộc tính isSensitiveDataElement được thêm vào trường extensions khi thực hiện schema introspection. Để tìm hiểu các phần tử dữ liệu "nhạy cảm" trong lược đồ, hãy thực thi query này:

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

Sau đó tìm kiếm các mục có "isSensitiveDataElement": true trong kết quả.

Thêm các phần tử dữ liệu "nhạy cảm" vào các endpoint

Việc thêm các phần tử dữ liệu "nhạy cảm" vào lược đồ có thể được cấu hình như sau, theo thứ tự ưu tiên:

✅ Chế độ cụ thể cho custom endpoint hoặc persisted query, được định nghĩa trong cấu hình lược đồ

Thêm các phần tử dữ liệu "nhạy cảm" vào lược đồ, được đặt trong Schema configuration

✅ Chế độ mặc định, được định nghĩa trong Cài đặt

Nếu cấu hình lược đồ có giá trị "Default", nó sẽ sử dụng chế độ được định nghĩa trong Cài đặt:

Cấu hình các phần tử dữ liệu “nhạy cảm” cho schema configuration, trong Cài đặt
Cấu hình các phần tử dữ liệu “nhạy cảm” cho schema configuration, trong Cài đặt

Khi nào nên sử dụng

Sử dụng bất cứ khi nào được phép hiển thị thông tin riêng tư, chẳng hạn như khi xây dựng một trang web tĩnh, lấy dữ liệu từ một WordPress instance cục bộ (tức là không phải API công khai).