如何使用安全规则过滤文档中的字段

nal*_*ply 2 projection firebase-security google-cloud-firestore

我正在试验 Cloud Firestore 安全规则。是否可以过滤文档字段?

例如,如果您有一个文档

{
  name: "John Doe",
  email: "doe@example.com"
}
Run Code Online (Sandbox Code Playgroud)

那么某些用户就不允许使用电子邮件地址获取文档。他们的申请要求文件

firebase.firestore.doc('users/doe-uid')
Run Code Online (Sandbox Code Playgroud)

并得到这个文件

{
  name: "John Doe",
}
Run Code Online (Sandbox Code Playgroud)

如果是,如何?

我认为应该是可能的,因为Cloud Firestore 安全规则参考在第一句话中说(重点是我的):

Cloud Firestore 安全规则用于确定谁对存储在 Cloud Firestore 中的集合和文档具有读写访问权限,以及文档的结构方式以及它们包含哪些字段和值

但是,我在参考资料中找不到任何告诉我如何过滤字段的内容。

jeb*_*ben 5

Firestore 规则不是过滤器,它们是文档查询的服务器端验证,这意味着您可以访问(或不访问)整个文档,而不是特定字段。

您提到的那篇文档意味着您可以对字段进行数据验证。这是验证写入查询(via request.resource.data)数据的规则的基本示例:

match /users/{userId} {
    allow write: if request.resource.data.age is int;
}
Run Code Online (Sandbox Code Playgroud)

这是另一个使用现有字段来验证读取查询(via resource.data)的基本示例:

match /articles/{articleId} {
    allow read: if resource.data.isPublished == true;
}
Run Code Online (Sandbox Code Playgroud)

要过滤掉字段,您必须在查询之后在客户端执行此操作。

现在,如果您想保护对某些字段的访问,您必须使用一组不同的规则创建另一个集合(查看子集合),并进行另一个匹配这些规则的查询。