Firestore规则-按字段保护数据

问题描述 投票:0回答:1

我的“提要”文档上有一个字段,代表用户ID。我想保护我的数据,以便只有用户才能使用自己的userId读取/写入提要条目。其他所有内容-只要经过身份验证,就允许用户读取/写入。

我是Firestore的新手,但到目前为止,我有类似这样的内容:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /feed/{feedItem} {
        allow read, write: if request.auth.uid == resource.data.userId
    }
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

不幸的是,这仍然允许对包括提要项在内的所有内容进行读/写访问。

google-cloud-firestore firebase-security-rules
1个回答
2
投票

这些规则不会按照您期望的方式工作。

如果您在此处看到的字段名称与文档中的字段名称相匹配,您在feed集合中限制对文档进行读写的规则就可以了。

但是,您对match /{document=**}的“其他所有内容”的规则不正确。不管您的其他规则是什么,此规则始终匹配整个数据库中的每个文档。因此,正如您现在编写的那样,每个用户仍然可以读写每个文档,包括“ feed”中的文档,因为该规则始终允许它。

谨记以下有关安全规则工作方式的陈述:

  • 如果有任何规则允许访问某些文档,则将允许访问。
  • 一旦某个规则允许对文档的访问,该访问就不能被另一个规则撤销。

实际上,安全规则没有办法指定与其他规则有关的“其他所有内容”。相反,您需要做的是按照自己的规则按名称调用每个集合,并为其分配访问权限。是的,如果您有很多收藏品,这很麻烦,但这是您唯一的选择。

© www.soinside.com 2019 - 2024. All rights reserved.