基于每个用户管理对Firebase Firestore文档的访问



假设我的Firestore数据库中有users集合,并且用户文档应该只对特定的一组其他用户可见(例如社交媒体应用程序上的连接用户(。

类似于文档中关于用户和组的安全数据访问的示例,我可以使用包含连接用户的用户ID的数组visibleTo。然后,我可以通过使用array-contains查询来获取任何特定客户端都应该可见的所有用户文档,如下所示:

firestore.collection('users').where('visibleTo', 'array-contains', ownUserID).get()

然而,这也意味着,对于一个客户端,每个客户端都知道他们的联系人与哪些其他用户连接,因为该数组是作为用户文档的一部分提取到客户端的,其次,这可能会产生不必要的流量。

为了参考,请考虑以下示例文档:

{
firstName: 'John',
lastName: 'Doe',
visibleTo: ['userID0001', 'userID0002', 'userID0003', ...] // imagine 200 entries here
}

我如何使用Firestore来实现只获取"已连接"的用户/联系人而不实际获取visibleTo数组的功能?

确保此字段visibleTo位于用户无法访问(新收集路径(的位置

示例:

文档位置:/accessData/{userId}/visibility

数据可能是

{
visibleTo: ['userID0001', 'userID0002', 'userID0003', ...]
}

上面的集合/accessData没有人可以访问,只有管理员可以访问。

然后确保将读取访问逻辑移动到Firestore安全规则,而不是应用程序中的获取逻辑。在Firestore安全规则中,从该路径获取数据,并确定是否可以查看/accessData/{userId}/visibility

最新更新