我正在嘗試設計一個 Firestore 模式,允許多組人只編輯他們自己組的檔案,但服務范圍內的任何人都可以閱讀它們。Firestore 的安全規則設定似乎不可能。
基于角色的訪問
Firebase 支持基于角色的訪問控制,但它適用于服務范圍的檔案,我無法支持很多組。
自定義角色是通過 gcloud 控制臺創建和分配的,因此我無法為每個組創建新的動態自定義角色,以便他們擁有自己的組。
Firestore 觸發器復制檔案
我考慮使用 Firestore 觸發器(onCreate、onUpdate、onDelete)將檔案復制到同一組中其他用戶的子集合。這樣做的問題是它可能會創建無限回圈的觸發器,因為每個成員都可以更新檔案。理論上,您可以使用復制檔案上的屬性集來防止這種情況發生,但感覺有點笨拙和脆弱。
是否有最佳實踐,或者 Firestore 無法做到這一點?
uj5u.com熱心網友回復:
帶有自定義宣告的Firebase 身份驗證可能非常適合此用例。您可以添加宣告groupId并將其值設定為用戶所屬組的 ID。如果用戶可以是多個組的一部分,則存盤groupIds. 您可以檢查此 groupId 是否包含在安全規則中的用戶宣告中。
您必須將 存盤groupId在每個檔案中,以便我們知道該檔案屬于哪個組。您可以嘗試以下規則:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /collection/{docId} {
allow read, write: if resource.data.groupId == request.auth.token.groupId;
}
}
}
僅當檔案中的 groupId 與自定義宣告中的 groupId 匹配時,上述規則才允許用戶讀取、寫入檔案。
只能在安全環境中使用Firebase Admin SDK更改自定義宣告,因此您可能必須使用 Cloud 函式/服務器將用戶添加到各自的組。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/349410.html
標籤:火力基地 谷歌云firestore
