允许基于映射密钥进行访问

时间:2017-10-22 06:59:50

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

这是安全规则的一个简单而常见的用例,但无法使其正常工作。 我的Firestore(不是RTDB)上有一个文档orgs/fooOrg,它包含一个对象

{
  "members": {
    "fooUser": true
  }
}

并且应用的规则是

service cloud.firestore {
  match /databases/{database}/documents {
    match /orgs/{orgId} {
      allow read: if "fooUser" in resource.data.members;
    }
  }
}

我希望能够阅读orgs集合中的所有文档;但是,服务器因运行

而显示Error: Missing or insufficient permissions
firebase.firestore().doc('orgs/fooOrg').get()

在浏览器上(使用v4.5.0和v4.5.1)。甚至

allow read: if resource.data.members["fooUser"] == true;

也失败了。出了什么问题?

根据我的理解,这应该按照本文件的规定进行 https://firebase.google.com/docs/firestore/security/secure-data#evaluating_documents_currently_in_the_database

我相信 就像一周前那样工作。突然之间,我的工作代码开始产生错误,所以我写了这个MCVE并在几个不同的项目上进行了测试。

另外,我在下面发现了类似的问题,但与它们有点不同,所以不确定是否是同样的原因(Firestore上的错误)

Firestore security rules based on map values (我的情况,甚至得到一个简单的文件失败)

Firestore read rules with self condition (这种情况使用地图的值。我的情况下,使用了一个键)

1 个答案:

答案 0 :(得分:0)

现在看来问题是在不改变代码的情况下解决的。没有公告,但似乎Firestore方面已经解决了一些问题。