Firebase规则不适用于子集合文档

Firebase规则不适用于子集合文档,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,这是我的规则 rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /Users/{id}{ allow read : if (request.auth.uid == resource.data.uid); allow write : if false; } match /Class/{id}

这是我的规则

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /Users/{id}{
        allow read : if (request.auth.uid == resource.data.uid);
      allow write : if false;
    }
    
   
    match /Class/{id}{
        allow read : if (request.auth.uid == resource.data.instructor.uid || (request.auth.uid == resource.data.admin.uid));
     
      allow write : if false;
    }
   
    match /Class/{id}/Topics/{doc} {
             allow read:
       if request.auth.uid == resource.data.topicOwnerUID || request.auth.uid == resource.data.adminUID
        allow write: if false;
        }
    
  }
}
除了尝试从Class/docs/topics/docs中提取所有主题外,一切都很好。我使用getDocuments并尝试使用limit(50)获取所有文档,我现在只有一个主题,但我也尝试将limit设置为1,但仍然不起作用。。在每个主题文档中,都有一个adminUID和一个TopicOwnruid字段。当所有者尝试提取所有文档时,我收到一个错误:“错误:缺少或权限不足。”。我检查了,所有必需的字段都在那里,这应该允许

编辑:好像我删除了。限制,只得到一个带有特定文档ID的文档,它就可以工作了。但这不是我想要的:/。也许我必须将子集合制作成自己的集合


Edit2:即使不是子集合也不起作用。完全迷路了。看起来唯一的方法是单独获取每个文档,但这会破坏懒散的加载。Firebase落后了。将切换到另一个数据库。

如果没有匹配的查询,安全规则就没有任何意义-请记住,安全规则不是过滤器-它们不会“只给您允许的记录”-您必须使用查询来匹配规则。如果查询可能返回规则不允许的文档,则不允许整个查询


通过广泛使用,我可以告诉您Firebase/Firestore在任何方面都不会落后,而且我不断使用复杂的查询。

我在getDocuments之前在前端添加了查询,但它仍然不起作用。如果我必须摆脱安全规则,允许所有人都读,这不是一个巨大的安全风险吗?我解决了它。如果他们添加了OR运算符来比较字符串,我会很高兴。最接近OR运算符的是(最近)添加的“in”运算符,它允许您检查字段是否为数组中的任何条目。最多10个元素。除此之外,还需要多次查询。