Tujuan utama dukungan aturan kueri Pipeline adalah untuk menciptakan kesesuaian dengan kemampuan pemfilteran mesin Aturan yang ada. Meskipun kueri Pipeline menawarkan serangkaian fitur yang lengkap, mesin Aturannya dibatasi untuk mengenali filter sederhana guna memastikan pemenuhan dan keamanan kueri.
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:
- Persamaan dan Pertidaksamaan:
eq,neq. - Perbandingan:
gt,gte,lt,lte. - Himpunan:
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
konteks kueri, meskipun beberapa properti yang tersedia dalam kueri standar tidak
didukung dalam pipeline.
Properti yang didukung
Mesin baru ini tetap 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 dari permintaan.
Properti yang tidak didukung
Properti request.query seperti limit, offset, dan orderBy tidak
didukung untuk pemeriksaan aturan Pipeline karena kompleksitas penentuan nilai ini
dalam kueri yang terdiri dari beberapa 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 berlaku pada data yang disimpan, bukan nilai
turunan. Jika pipeline mencakup tahap yang mengubah kolom (Misalnya,
AddFields,ReplaceWith,Select), mesin Aturan akan berhenti menerapkan batasan filter setelah mencapai tahap tersebut. - Tahap literals: Tahap
literals()tidak melakukan pembacaan dari database, tetapi dapat menimbulkan biaya. Untuk mencegah penyalahgunaan, tahap ini harus dipasangkan dengan tahap lain (seperticollection()) yang dapat diverifikasi oleh aturan.