firebase - Firestore 规则在尝试读取 resource.data 值时无法尝试列出集合

标签 firebase google-cloud-firestore firebase-security

简单场景:

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

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

最佳答案

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

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

关于firebase - Firestore 规则在尝试读取 resource.data 值时无法尝试列出集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53638646/

相关文章:

javascript - 如何从firestore获取所有文档

firebase - 用于在用户之间共享文档的 Firestore 数据库规则和结构

AngularJS 与 Firebase 身份验证共享服务

firebase - flutter |如何将数据添加到 Firestore 中的现有文档

ios - Swift Firebase - 通过观察引用获得所有评分总和的最有效方法?

java - 如何使用 Android Studio 从 Firebase 实时数据库中的节点检索特定数据?

javascript - 无法编辑由其他用户在 Firestore 中创建的文档 (Vue.js/Firestore)

java - 从 Firestore JAVA 删除消息

javascript - Firebase firestore安全规则访问路径参数

ios - Xcode 9.3 和 Firebase Crashlytics 不工作