เป้าหมายหลักของการรองรับกฎการค้นหาในไปป์ไลน์คือการจับคู่ความสามารถในการกรองของเครื่องมือ Rules ที่มีอยู่ แม้ว่าการค้นหาแบบไปป์ไลน์จะมีฟีเจอร์มากมาย แต่เครื่องมือจัดการกฎจะจำกัดไว้ที่การจดจำตัวกรองอย่างง่ายเพื่อให้มั่นใจว่าการค้นหาจะตอบสนองได้และมีความปลอดภัย
นิพจน์ตัวกรองที่รองรับ
หากต้องการให้กฎจำกัดการค้นหา การค้นหานั้นต้องใช้ตัวดำเนินการเปรียบเทียบมาตรฐานกับค่าคงที่ เครื่องมือจัดการกฎจะรู้จักตัวกรองประเภทต่อไปนี้
- ความเท่ากันและความไม่เท่ากัน:
eq,neq - การเปรียบเทียบ:
gt,gte,lt,lte - การเป็นสมาชิก:
in,arrayContains
ตัวอย่างเช่น
where(eq("foo", 2))where(lt("foo", 2))documents("/user/1", "/user/2").where(...)
ขอพร็อพเพอร์ตี้
คุณยังคงใช้ออบเจ็กต์ request เพื่อตรวจสอบสิทธิ์การตรวจสอบและ
บริบทการค้นหาได้ แม้ว่าระบบจะไม่รองรับพร็อพเพอร์ตี้บางอย่างที่ใช้ได้ในการค้นหามาตรฐานในไปป์ไลน์
ที่พักที่รองรับ
เครื่องมือใหม่ยังคงรองรับพร็อพเพอร์ตี้ต่อไปนี้
request.auth: เข้าถึงข้อมูล uid และโทเค็นของผู้ใช้request.method: ระบุการดำเนินการ (เช่นget,list)request.path: เส้นทางของทรัพยากรที่มีการเข้าถึงrequest.time: การประทับเวลาฝั่งเซิร์ฟเวอร์ของคำขอ
พร็อพเพอร์ตี้ที่ไม่รองรับ
ระบบไม่รองรับพร็อพเพอร์ตี้ request.query เช่น limit, offset และ orderBy สำหรับการตรวจสอบกฎของไปป์ไลน์เนื่องจากความซับซ้อนในการกำหนดค่าเหล่านี้ในการค้นหาแบบหลายขั้นตอน
การจัดการขั้นตอนไปป์ไลน์และสิทธิ์
ขั้นตอนต่างๆ ของไปป์ไลน์จะแมปกับการดำเนินการแบบละเอียดที่เฉพาะเจาะจงใน กฎความปลอดภัย ดังนี้
- สิทธิ์
allow list: ทริกเกอร์โดยขั้นตอนcollection(),collectionGroup()และdatabase() allow getpermissions: Triggered by thedocuments()stage, which is treated similarly to a batchgetoperation.- ขั้นตอนการแก้ไขฟิลด์: กฎจะทำงานกับข้อมูลที่จัดเก็บไว้เท่านั้น และจะไม่ทำงานกับค่าที่ได้มา
หากไปป์ไลน์มีขั้นตอนที่แก้ไขฟิลด์ (เช่น
AddFields,ReplaceWith,Select) เครื่องมือจัดการกฎจะหยุดใช้ ข้อจํากัดของตัวกรองหลังจากพบขั้นตอนนั้น - ขั้นตอนค่าคงที่: ขั้นตอน
literals()จะไม่อ่านจากฐานข้อมูล แต่ อาจทำให้เกิดค่าใช้จ่ายได้ โดยต้องจับคู่กับขั้นตอนอื่น (เช่นcollection()) ที่กฎสามารถยืนยันได้เพื่อป้องกันการละเมิด