Firestore哪里有规则声明?

时间:2019-08-22 12:25:14

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

我有一个Firestore查询:

firebase.firestore()
    .collection('files')
    .where("design_id", "==", design.id)
    .get();

获取文件列表,数据看起来像这样

{
design_id: "P6oShXH081Mbssxs2zcp",
name: "all-teachers-like-brains.png",
type: "image",
user_id: "1uD82gAXORYsyimX5Dw23DDAimx1"
}

我想做的是确保只有能够访问它们的用户才是uid与文档中的user_id匹配的用户。

为此,我有以下规则(版本2)

{
  match /files/{document=**} {
      allow read, delete: if fileBelongsToUser();
  }

function fileBelongsToUser() {
      return get(/databases/$(database)/documents/files/{document=**}).data.user_id == request.auth.uid;
    }
}

尽管如此,我仍然遭到拒绝,我不知道为什么。我的规则是否阻止了where语句?

1 个答案:

答案 0 :(得分:3)

Firebase security rules are not filters。您不能通过应用规则来限制查询访问的文档。如果规则不允许查询中的任何文档,则整个查询将失败。因此,查询只需要请求规则允许的文档。

因此,如果您的规则说uid必须等于文档中的字段user_id,则查询必须使用该条件过滤文档:

firebase.firestore()
    .collection('files')
    .where("design_id", "==", design.id)
    .where("user_id", "==", uid)
    .get();

其中上面的uid是当前经过身份验证的用户的UID。