假设我的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