当尝试读取resource.data值时,Firestore规则无法尝试尝试列出集合

时间:2018-12-05 18:32:47

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

简单方案:

  • 我有一个名为“ foo”的收藏
  • 它只有一个文档,其ID为“ bar”
  • “ bar”具有一个名为“ sample”的字符串字段,其值为“ fail”

如果我在规则集中尝试了类似的操作:

  service cloud.firestore {
    match /databases/{database}/documents {
      // Test rule
      match /foo/{id} {
        allow read: if resource.data.sample == 'fail';
      }
    }
  }

当我在查询中指定文档ID时,它可以在“栏”上查询,但是如果我尝试列出所有项目,则查询返回“缺少或权限不足”。我也尝试过allow read: if get(/databases/$(database)/documents/foo/$(id)).data.sample == 'fail';,但结果相同。

集合中只有一条记录,我可以在引用数据ID时对其进行单独查询。我了解,为使查询正常工作,过滤条件需要匹配规则。在这种情况下,我不会应用任何过滤器,但应返回所有(1)条记录。

我很难找到解决办法。我见过的所有解决方案都说查询结果需要匹配规则,在这种情况下,它们应该匹配。

1 个答案:

答案 0 :(得分:0)

我不知道发生了什么,但现在似乎正在运行。我没有进行任何更改以使其正常工作。通过Web API,我使用的测试代码非常简单:

function test() { firebase.firestore().collection("foo").get().then((querySnapshot) => {
    querySnapshot.forEach((doc) => {
        console.log(`${doc.id} => ${doc.data()}`);
    }); });} test();