Firestore自我阅读规则
我目前正在尝试在firebase上构建一个小应用程序,作为对它的评估。 它看起来很有趣并且超级高效,但是我有一个与Firestore规则有关的问题。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中是否存在针对类似场景的建议方法?
编辑: 我尝试添加 '得到' 和 '名单' 的规则是这样的:
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';
我想创建和更新工作,因为他们写的一部分,条件1覆盖它。
请注意,'write'是'update'的超集,所以您当前的'write'规则会覆盖'update'。将其更改为“创建”,您会更接近您的预期目标。 –
@MikeMcDonald谢谢,我会这样做的。我还发现(在仔细阅读后)有两个“读数”。 'get'和'list'稍后我会尝试允许更广泛的列表,也许它是我需要的东西。谢谢! – Monku
'read'是包含'get'和'list'的伞。我已经确认上述是一个错误 - 它应该可以工作,但我们在这里没有正确处理阵列成员。一旦修复失败,我会在这里跟进。 –