我想要的是能够发送查询,以返回用户所在的所有团队。 uid1将返回team1,但不返回其他团队。我当前的模型不起作用,因为用户没有权限读取Teams集合中的所有文档,因此我遇到了权限问题。
“团队”集合可以包含多个团队,用户可以是多个团队的一部分。
这是我当前的消防站的组织方式:
Users:
uid1
firstname: xxxx
lastname: yyyy
Teams:
team1
subCollection1
...
subCollection2
...
members
uid1
...
roles
uid1
role: dev
team2
...
我只能想到两种解决方案,但似乎都不是很好。
组织数据以允许我想要的功能的最佳方法是什么?
答案 0 :(得分:0)
您可以在“用户”下创建一个子集合,然后执行collectionGroup
查询以获取该团队中的所有用户,也可以通过常规查询获取该用户所在的所有团队。您只需要将teamID存储在子集合中,如果需要,还可以存储一些其他静态信息。
Users:
uid1
firstname: xxxx
lastname: yyyy
teams (collection)
teamID (document)
teamID (document)
uid2
firstname: xxxx
lastname: yyyy
teams (collection)
teamID (document)
Teams:
team1
subCollection1
...
subCollection2
...
roles
uid1
role: dev
team2
...
现在也无需将members
存储在Teams
下,因为您可以通过Users
集合运行所有查询,一旦拥有teamID
,就可以执行无论您想要什么。
您还必须更改collectionGroup
查询的权限才能使其正常工作。
例如:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{path=**}/teams/{teamID} {
allow read: if request.auth.uid != null;
}
match /users/{userID}/teams/{teamID} {
allow write: if request.auth.uid == resource.data.author;
}
}
}