เป้าหมายหลักของการรองรับกฎการค้นหาในไปป์ไลน์คือการจับคู่ความสามารถในการกรองของเครื่องมือจัดการกฎที่มีอยู่ แม้ว่าการค้นหาแบบไปป์ไลน์จะมีฟีเจอร์มากมาย แต่เครื่องมือจัดการกฎจะจำกัดการจดจำตัวกรองอย่างง่ายเพื่อให้มั่นใจว่าการค้นหาจะตอบสนองได้และมีความปลอดภัย
นิพจน์ตัวกรองที่รองรับ
หากต้องการให้กฎจำกัดการค้นหา การค้นหานั้นต้องใช้ตัวดำเนินการเปรียบเทียบมาตรฐานกับค่าคงที่ เครื่องมือจัดการกฎจะรู้จักตัวกรองประเภทต่อไปนี้
- ความเท่ากันและความไม่เท่ากัน:
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: เรียกใช้โดยขั้นตอนdocuments()ซึ่ง ได้รับการปฏิบัติคล้ายกับการดำเนินการgetแบบเป็นกลุ่ม- ขั้นตอนการแก้ไขฟิลด์: กฎจะทำงานกับข้อมูลที่จัดเก็บไว้เท่านั้น และจะไม่ทำงานกับค่าที่ได้มา
หากไปป์ไลน์มีขั้นตอนที่แก้ไขฟิลด์ (เช่น
AddFields,ReplaceWith,Select) เครื่องมือจัดการกฎจะหยุดใช้ ข้อจํากัดของตัวกรองหลังจากพบขั้นตอนนั้น - ขั้นตอนค่าคงที่: ขั้นตอน
literals()จะไม่อ่านจากฐานข้อมูล แต่ อาจทำให้เกิดค่าใช้จ่ายได้ โดยต้องจับคู่กับขั้นตอนอื่น (เช่นcollection()) ที่กฎสามารถยืนยันได้เพื่อป้องกันการละเมิด