我正在尝试在firebase上构建小应用程序作为对它的评估。 它看起来很有趣,而且效率很高,但我对firestore规则有一个问题。
我有一个集合(游戏),其对象看起来像这样:
{
"name":String,
"description":String,
"owners":
{
"uid": String
"uid2": String
}
}
规则设置如下:
service cloud.firestore {
match /databases/{database}/documents {
match /games {
match /{game} {
allow write: if request.auth != null && request.resource.data.owners[request.auth.uid] == 'ADMIN';
allow update: if request.auth != null && resource.data.owners[request.auth.uid] == 'ADMIN';
allow read: if request.auth != null && resource.data.owners[request.auth.uid] == 'ADMIN';
}
}
}
}
写时,更新工作正常。只读适用于单个文档。 当我尝试读取集合时,我得到访问错误,就像用户没有权利一样。使其无效的部分是
resource.data.owners[request.auth.uid] == 'ADMIN'.
向集合查询添加where("owners."+auth.uid,"==", 'ADMIN')
也无济于事。
我在这里做错了什么?在firebase firestore中是否有针对类似场景的建议方法?
编辑: 我尝试添加“get”和“list”规则,如下所示:
allow list: if request.auth != null;
allow get: if request.auth != null && resource.data.owners[request.auth.uid] == 'ADMIN';
它没有按预期工作。我希望它允许我列出where
的文档,但是如果有文档我不能get
我希望得到“缺少权限或权限不足”。我能够做的是列出所有文档,但不能直接读取其中一些文档(get
规则在尝试获取单个文档时有效,但在从集合中列出时却不行。)
编辑2:根据@MikeMcDonald看起来我的期望是正确的,但它目前被窃听。等待修复。
编辑3:现在可以正常使用以这种方式获取和列出设置的规则:
allow get, list: if request.auth != null && resource.data.owners[request.auth.uid] == 'ADMIN';
答案 0 :(得分:0)
我认为创建和更新有效,因为它们是写入的一部分,条件1涵盖了它。