Max*_*out 2 dart firebase google-cloud-platform flutter google-cloud-firestore
我目前正在开发一个应用程序,用户可以在其中创建组并邀请其他人加入其中。我希望同一组中的人能够看到他们的名字和姓氏。为此,我有一个名为“用户”的集合,其中每个用户都有一个包含其所有个人数据的文档,例如名字和姓氏、电话、职位……我还有另一个名为“组”的集合,其中我的所有组存储其名称和包含成员 ID 的数组。
当用户打开应用程序时,将完成第一个请求以请求他的组(他收到组名称和成员数组)。之后,如果他想知道某个组中的用户,则发出另一个请求,仅搜索所有成员的名字和姓氏。
因此,我想象有一个查询只会返回我想要检索的字段,并且有一条规则允许拒绝潜在的黑客访问整个用户文档,除非该用户是该文档的所有者该文件。
// For retrieving my user's groups
Stream<List<Group>?> get organizations {
return firestore
.collection('Groups')
.where('members', arrayContains: this.uid)
.snapshots()
.map(_groupsFromSnapshot);
}
Run Code Online (Sandbox Code Playgroud)
// For retrieving names of the members of a group
Stream<List<Member>?> getMembers(Group group){
return firestore
.collection('Users')
// and i dont know what to do here ...
}
Run Code Online (Sandbox Code Playgroud)
使用客户端 SDK 和 Flutter 插件,不可能仅获取文档字段的子集。当您获取文档时,您将获得它及其所有字段。
如果您只想获取文档字段的子集,可以实现以下两种方法:
Users集合,即“主”集合和新集合):为此,使用云函数是很常见的。另请注意,最好对两个集合中的链接文档使用相同的 documentID。DocumentMask在使用方法获取一个文档时使用 a get,或者Projection在查询集合时使用 a。或DocumentMask将Projection“将对文档的获取操作限制为其字段的子集”。您可以使用该http包从 Flutter 应用程序调用 API。但是,如果您想保护其他用户数据,第二种方法无效:恶意用户可以使用相同的请求调用 Firestore REST API,但不带DocumentMask或Projection. 换句话说,如果您只是想最大限度地减少网络流量,而不是想对文档的某些字段保密,那么这种方法很有趣。
因此,对于您的特定用例,您需要采用第一个解决方案。
| 归档时间: |
|
| 查看次数: |
1516 次 |
| 最近记录: |