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 tahapcollection(),collectionGroup(), dandatabase(). - Izin
allow get: Dipicu oleh tahapdocuments(), yang diperlakukan serupa dengan operasigetbatch. - 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 (seperticollection()) yang dapat diverifikasi oleh aturan.