Firebase 多个组和用户的Firestore结构和规则

Firebase 多个组和用户的Firestore结构和规则,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,我很难为Firestore中的多组和多用户设置找到最佳解决方案 在下面,您可以看到到目前为止的结构和规则,在一个组希望按名称列出所有成员之前,它工作得非常好,应该如何为此设置规则 或者,您是否建议我的设置采用不同的结构 users: [ "userId" { "name" : "Name", "groups" : ["groupId", "groupId", "groupId"] } ] groups: [ "groupId" { "name" :

我很难为Firestore中的多组和多用户设置找到最佳解决方案

在下面,您可以看到到目前为止的结构和规则,在一个组希望按名称列出所有成员之前,它工作得非常好,应该如何为此设置规则

或者,您是否建议我的设置采用不同的结构

users: [
  "userId" {
     "name" : "Name",
     "groups" : ["groupId", "groupId", "groupId"]
    }
]

groups: [
  "groupId" {
     "name" : "Name",
     "members" : ["uid1", "uid2", "uid3"]
    }
]

contacts: [
  "contactId" {
     "name" : "Name",
     "owner" : "groupId"
    }
]
消防队规则

function member(groupId) {
  return request.auth.uid in get(/databases/$(database)/documents/groups/$(groupId)).data.members;
}

match /users/{userId} {
  allow read; // <---  how to allow only same group members to read?
  allow write: if request.auth.uid == userID;      
}

match /groups/{groupId} {
  allow read: if request.auth.uid in resource.data.members;
  allow write: if request.auth.uid in resource.data.admins;
}       

match /contacts/{contactID} {
  allow read: if member(resource.data.owner);
  allow write: if member(request.resource.data.owner);
} 
功能成员(groupId){
在get(/databases/$(database)/documents/groups/$(groupId)).data.members中返回request.auth.uid;
}
匹配/users/{userId}{
允许读取//