管道作業的安全規則
管道作業規則可讓您比對現有規則引擎的篩選功能。雖然 Pipeline 作業提供豐富的功能,但為確保查詢可滿足需求和安全性,規則引擎只能辨識簡單的篩選條件。
版本和模式需求
本文適用於原生模式的 Firestore Enterprise 版。
支援的篩選運算式
如要讓查詢受到規則限制,必須使用標準比較運算子與常數進行比較。規則引擎可辨識下列篩選器類型:
- 相等和不相等:
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()) 配對。