Pipeline 查詢規則支援的主要目標,是比照現有規則引擎的篩選功能。管道查詢提供豐富的功能集,但規則引擎僅限於辨識簡單的篩選條件,以確保查詢可滿足需求並兼顧安全性。
支援的篩選運算式
如要讓查詢受到規則限制,必須使用標準比較運算子與常數進行比較。規則引擎可辨識下列篩選條件類型:
- 相等和不相等:
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:要求的伺服器端時間戳記。
不支援的屬性
由於在多階段查詢中判斷這些值相當複雜,因此 Pipelines 規則檢查不支援 request.query 屬性,例如 limit、offset 和 orderBy。
管道階段處理方式和權限
管道的不同階段會對應至安全規則中的特定細微作業:
allow list權限:由collection()、collectionGroup()和database()階段觸發。allow get權限:由documents()階段觸發,處理方式與批次get作業類似。- 欄位修改階段:規則只會對儲存的資料生效,不會影響衍生值。如果管道包含會修改欄位的階段 (例如
AddFields、ReplaceWith、Select),規則引擎會在遇到該階段後停止套用篩選器限制。 - 常值階段:
literals()階段不會從資料庫讀取資料,但可能會產生費用。為防範濫用情形,這個階段必須與可透過規則驗證的其他階段 (例如collection()) 配對。