首页 > 解决方案 > 保护和过滤 FireStore 文档中的某些数据“密钥”

问题描述

我正在开发一个应用程序,它需要搜索所有附近的用户而不共享他们在 100 英里内的坐标,比如说。下面的示例我使用 GeoHash 来帮助我计算距离。

在 FireStore 中,我在用户集合中有以下文档。

{
   "userId" : "12345",
   "displayName" : "username",
   "geoHash" : "gbsuv",
   "photoUrl" : "example.com/user.jpg",
   "refId" : "0001"
}

问题是:我应该如何保护“geoHash”免于在集合内的每个文档中被检索到?

标签: firebasegoogle-cloud-firestoregeolocationgeofirestore

解决方案


Firestore 安全规则授予文档级别的访问权限。因此,用户要么可以阅读整个文档,要么无法阅读该文档中的任何内容。无法授予用户仅访问文档的一部分的权限。

这意味着您无法查询客户端无法读取的内容。因此,在您当前的结构中,如果用户需要查询geoHash,他们也将能够读取该字段。

唯一的选择是不让客户端进行查询,而是在服务器上进行查询(例如在 Cloud Functions 中)。为此,您需要将每个用户的 geohash 存储在一个单独的文档中(比如在一个名为 的集合中locations)。Cloud Function 然后查询此集合,并将真实的用户文档(不再包含 geohash)返回给用户。


推荐阅读