簡體   English   中英

Firestore 規則:使集合中的文檔和所有子集合遵循相同的規則

[英]Firestore Rules: Making documents in a collection and all subcollections follow the same rule

我正在制作一個看起來像這樣的結構:

users
  user1
  user2
  user3
group
  group1
  group2
  group3
     subcollections1
        subdoc11
        subdoc12
     subcollections2
        subdoc21
        subdoc22

所以解釋一下,我有一個用戶集合和組集合。 所有用戶都必須屬於一個且僅是一個組。 一個組有一個“成員”字段,我檢查用戶是否是成員。

所以我的規則現在是這樣的。

match /groups/{document=**} {
  allow read, write: if resource.data.users[request.auth.uid] != null;
}

我的問題是,即使在寫入子集合時,它是否會准確地檢查用戶是否在group1->doc-'members'中,或者在這種情況下它會檢查group1->doc->subcollection->doc-'members'嗎?

因為 members 列表只在 groups 集合中,不在子集合中,所以不需要第二種情況。

雖然我還沒有實際嘗試過,但resource.data變量是對正在訪問的文檔的引用。 因此,如果路徑訪問文檔/groups/group3/subcollections1/subdoc11 ,那將是resource.data引用的文檔。 因此,我認為您的規則不會按預期工作。

關於如何實現所需的行為,請注意最好在最細粒度的級別定義 Firestore 規則。 這將防止在應該應用更嚴格的規則而不是應用更廣泛的規則時意外授予訪問權限。 我會建議這樣的事情:

match /groups/{groupId} {
  allow read, write: if resource.data.users[request.auth.uid] != null;
}

match /groups/{groupId}/{subcollection}/{documentId} {
  allow read, write: if get(/databases/$(database)/documents/$(groupId)).data.users[request.auth.uid] != null
}

如需進一步參考,請查看有關規則工作原理示例規則的頁面。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM