Firestore自我阅读规则

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'。将其更改为“创建”,您会更接近您的预期目标。 –

+0

@MikeMcDonald谢谢,我会这样做的。我还发现(在仔细阅读后)有两个“读数”。 'get'和'list'稍后我会尝试允许更广泛的列表,也许它是我需要的东西。谢谢! – Monku

+1

'read'是包含'get'和'list'的伞。我已经确认上述是一个错误 - 它应该可以工作,但我们在这里没有正确处理阵列成员。一旦修复失败,我会在这里跟进。 –

我想创建和更新工作,因为他们写的一部分,条件1覆盖它。