单个文档查询的Firebase Firestore权限

时间:2018-03-30 12:48:42

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

编辑 - 以下任何内容都没有错,我是个白痴并使用不正确的文档ID

我试图从嵌套在另一个集合中的集合中获取文档时收到权限异常。我的规则设置如下:

service cloud.firestore {
  match /databases/{database}/documents {
    match /campaigns/{campaignId} {
      allow read, update, delete: if request.auth.uid == resource.data.owner;
      allow create: if request.auth.uid != null && request.auth.uid == request.resource.data.owner;

      function parentDoc() {
         return get(/databases/$(database)/documents/campaigns/$(campaignId)).data;
      }

      match /scenes/{sceneId} {
        allow read, write: if parentDoc().owner == request.auth.uid;
      }
    }
  }
}

根据我的理解,这应该允许用户访问嵌套在广告系列中的场景,只要他们签名的auth uid等于父广告系列中的“所有者”参数即可。查询广告系列中的所有场景时,此方法正常。我现在想要做的是从场景中检索特定文档。我获取文档的代码(Android,Java)如下所示:

db.collection("campaigns")
  .document(campaignId)
  .collection("scenes")
  .document(sceneId)
  .addSnapshotListener(this);

不幸的是,这会导致“PERMISSION_DENIED:缺少权限或权限不足”异常。从阅读文档here我会发现,检索特定文档应符合我现行的规则:

  

此行为适用于检索一个或多个文档的查询   从集合而不是单个文档检索。当你   使用文档ID检索单个文档,Cloud Firestore读取   文档并使用您的安全规则评估请求   实际的文件属性。

所以看起来我必须误解某些事情或者出错了。

编辑 - 此查询适用于当前规则:

db.collection("campaigns")
      .document(campaignId)
      .collection("scenes")
      .addSnapshotListener(this);

0 个答案:

没有答案