[英]Firestore get all documents (contain subcollections) from a root collection
[英]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.