Firestore规则-按字段保护数据

时间:2019-11-25 02:38:31

标签: google-cloud-firestore firebase-security

我的“提要”文档中有一个字段表示userId。我想保护我的数据,以便只有用户才能使用自己的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;
    }
  }
}

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

1 个答案:

答案 0 :(得分:2)

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

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

但是,您使用match /{document=**}进行“其他所有操作”的规则并不正确。无论您使用其他什么规则,该规则都会始终匹配整个数据库中的每个文档。因此,就像您现在编写的一样,每个用户仍然可以读写每个文档,包括“提要”中的文档,因为该规则始终允许它。

请记住以下有关安全规则工作方式的声明:

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

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