我有一个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语句?
答案 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。