【问题标题】:Firestore rule does not work trying to list collection when trying to read resource.data values尝试读取 resource.data 值时,Firestore 规则在尝试列出集合时不起作用
【发布时间】:2019-05-07 09:31:42
【问题描述】:

简单场景:

  • 我有一个名为“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) 条记录。

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

【问题讨论】:

  • 要在这里完整,可以编辑问题以显示无法按您期望的方式工作的客户端代码吗?
  • 今天运行良好,我没有更改任何内容。真奇怪。无论如何,我会关闭它。

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


【解决方案1】:

我不知道发生了什么,但它现在似乎正在工作。我没有改变任何东西来让它工作。我使用的测试代码通过 Web API 非常简单:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-02-21
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多