Aturan Keamanan untuk operasi Pipeline

Aturan operasi Pipeline memungkinkan Anda mencocokkan kemampuan pemfilteran mesin Aturan yang ada. Meskipun operasi Pipeline menawarkan serangkaian fitur yang lengkap, mesin Aturan dibatasi untuk mengenali filter sederhana guna memastikan kueri dapat dipenuhi dan keamanan.

Persyaratan edisi dan mode

Dokumen ini berlaku untuk edisi Firestore Enterprise dalam mode Native.

Ekspresi Filter yang Didukung

Agar kueri dibatasi oleh aturan Anda, kueri tersebut harus menggunakan operator perbandingan standar terhadap konstanta. Jenis filter berikut dikenali oleh Mesin aturan:

  • Kesetaraan dan Ketidaksetaraan: eq, neq.
  • Perbandingan: gt, gte, lt, lte.
  • Keanggotaan: in, arrayContains.

Berikut beberapa contohnya:

  • where(eq("foo", 2))
  • where(lt("foo", 2))
  • documents("/user/1", "/user/2").where(...)

Properti Permintaan

Anda dapat terus menggunakan objek request untuk memvalidasi autentikasi dan mengkueri konteks, meskipun beberapa properti yang tersedia dalam kueri standar tidak didukung dalam pipeline.

Properti yang didukung

Mesin baru ini terus mendukung properti berikut:

  • request.auth: Mengakses data token dan uid pengguna.
  • request.method: Mengidentifikasi operasi (Misalnya, get, list).
  • request.path: Jalur resource yang diakses.
  • request.time: Stempel waktu sisi server untuk permintaan.

Properti yang tidak didukung

Properti request.query seperti limit, offset, dan orderBy tidak didukung untuk pemeriksaan aturan Pipelines karena kompleksitas dalam menentukan nilai ini dalam kueri multi-tahap.

Penanganan dan izin tahap pipeline

Ada berbagai tahap pipeline yang dipetakan ke operasi terperinci tertentu dalam aturan keamanan:

  • Izin allow list: Dipicu oleh tahap collection(), collectionGroup(), dan database().
  • Izin allow get: Dipicu oleh tahap documents(), yang diperlakukan serupa dengan operasi get batch.
  • Tahap modifikasi kolom: Aturan hanya beroperasi pada data yang disimpan dan bukan nilai turunan. Jika pipeline menyertakan tahap yang mengubah kolom (Misalnya, AddFields, ReplaceWith, Select), mesin Aturan berhenti menerapkan batasan filter setelah tahap tersebut ditemukan.
  • Tahap literal: Tahap literals() tidak membaca dari database, tetapi dapat menimbulkan biaya. Untuk mencegah penyalahgunaan, perintah ini harus dipasangkan dengan tahap lain (seperti collection()) yang dapat diverifikasi oleh aturan.