【问题标题】:Firestore read rules with self conditionFirestore 读取具有自身条件的规则
【发布时间】:2018-03-21 22:19:19
【问题描述】:

我目前正在尝试在 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';

【问题讨论】:

  • 请注意,writeupdate 的超集,因此您当前的write 规则将覆盖update。将其更改为create,您将更接近您的预期目标。
  • @MikeMcDonald 谢谢,我会这样做的。我还发现(仔细阅读后)有两个“阅读”。 getlist 稍后我将尝试允许更广泛的列表,也许这是我需要的东西。谢谢!
  • read 是包含getlist 的伞。我已经确认以上是一个错误——它应该可以工作,但是我们在这里没有正确处理数组成员。修复完成后,我会在这里跟进。
  • @MikeMcDonald 谢谢。现在这对我来说并不是超级关键,因为我正在使用 firebase 开始我的冒险,但能够做到这一点会很好。等待修复的好消息 :-)
  • 我已经确认这个错误现在已经修复,所以你应该可以正确使用嵌套属性了。

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


【解决方案1】:

我认为 create 和 update 有效,因为它们是 write 的一部分,并且条件 1 涵盖了它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    • 2012-08-05
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多