我可以限制 firestore 数据库中的某些字段只能由 firebase 管理员获取吗?

Vai*_*shi 1 firebase firebase-security google-cloud-firestore

我在 firestore 中有一个用户集合,它存储了一些我不想向用户透露的用户信息(例如会话 ID)。所以我的问题是,是否可以只允许 firebase 管理员获取文档的某些字段,而如果任何用户通过身份验证,则可以获取其余字段?Firebase 安全规则是否有可能?

Ren*_*nec 6

正如您所指出的,Firestore 安全规则“只允许达到文档级别的安全性”。

同样,使用客户端 SDK,当您获取一个文档时,您将获得该文档的整个字段集。

(在撰写本文时)只有 Firestore REST API 允许应用DocumentMask“将文档上的获取更新操作限制到其字段的子集”。请注意,这不是对字段级别的读写访问权限的限制(即它不实现/模仿安全规则),它只是一种减少传递给/接收的有效负载大小的方法API。


因此,话虽如此,一种解决方案是复制您的数据并拥有两个不同的集合:

  • 一个包含包含所有字段且仅由管理员用户可见的文档集合(受一组特定的安全规则保护)。
  • 一个包含文档的集合,其中包含任何经过身份验证的用户都可以获取的字段(受另一组安全规则保护,例如allow read: if request.auth.uid != null;)。

要“链接”一个文档的两个版本,您需要在每个集合中使用相同的文档 ID。

这种方法的一个副作用是您需要保持文档同步。如果修改了集合之一中的文档,则可以使用触发的云函数来完成此同步。由于一个文档的两个版本共享相同的 doc id,所以它不是很复杂。