【问题标题】:How to filter fields in documents with security rules如何使用安全规则过滤文档中的字段
【发布时间】:2018-05-14 06:19:37
【问题描述】:

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

例如,如果您有一个文档

{
  name: "John Doe",
  email: "doe@example.com"
}

则不允许某些用户使用电子邮件地址获取文档。他们的应用程序请求文档与

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

并获取此文档

{
  name: "John Doe",
}

如果是,怎么做?

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

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

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

【问题讨论】:

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


    【解决方案1】:

    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),并进行另一个匹配这些规则的查询。

    【讨论】:

    • 我接受了这一点,并将公共数据和私有数据分隔在两个文档中,今天我部署了一个工作测试。我仍然认为文档具有误导性。但这就是生活。把它吸起来,继续。
    猜你喜欢
    • 2019-08-26
    • 2022-01-19
    • 1970-01-01
    • 2020-12-22
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-03
    相关资源
    最近更新 更多