如何使用安全规则筛选文档中的字段

时间:2017-11-30 10:43:26

标签: firebase-security projection google-cloud-firestore

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

例如,如果您有文件

firebase.firestore.doc('users/doe-uid')

然后一些用户不允许使用电子邮件地址获取文档。他们的应用程序用

请求文档
{
  name: "John Doe",
}

并获取此文档

Let results = personsAttributes.GroupBy(Function(p) New With {Key .ID = p.PersonID, Key .Date = p.SomeDate})
From result in results
Select New MyType With
{
    .PersonID = result.Key.ID,
    .Date = result.Key.Date,
    .Type1 = result.Where(Function(r) r.AttributeType = "Type1").Select(Function(r) r.AttributeValue).FirstOrDefault()
}

如果是,怎么样?

我认为这应该是可能的,因为Cloud Firestore Security Rules Reference在第一句中说(重点是我的):

  

Cloud Firestore安全规则用于确定谁拥有对存储在Cloud Firestore中的馆藏和文档的读写权限,以及文档的结构和包含的字段和值

但是我在参考文献中找不到任何内容,告诉我如何过滤掉字段。

1 个答案:

答案 0 :(得分:2)

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

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

match /users/{userId} {
    allow write: if request.resource.data.age is int;
}

以下是使用现有字段验证读取查询的另一个基本示例(通过resource.data):

match /articles/{articleId} {
    allow read: if resource.data.isPublished == true;
}

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

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