首页 > 解决方案 > “允许创建”不适用于 Firestore 规则中的某些集合

问题描述

我在 Firestore 中有一个数据库,其中包含我定义了具有读取、创建、更新和删除操作的安全规则的集合数量。

直到星期六中午,所有具有给定条件的规则都允许读取数据并将数据写入集合,但突然之后,在一个名为“位置”的特定集合中,它给出了PERMISSION DENIED例外,仅用于在同一集合中创建文档但读取、更新并删除作品。

所以我更改了该集合的规则,如下所示进行测试

match /locations/{locationID} {
    allow read: if true;
    allow create: if true; //Condition commented...
    allow update: if <condition>;
    allow delete: if false;
}

在Android客户端中我编码为

database.collection("locations").add(mapData)
            .addOnCompleteListener {
                 if (it.isSuccessful) {
                     //Success
                 } else {
                     //Exception
                 }
             }

即使允许 create: 如果为 true,它也会给出相同的 Missing 或 Insufficient Permission 异常。但是当我将其更改为“允许写入:如果为真”时,它可以工作并添加文档

当我在RulesClient Code中将集合名称更改为test时,它会在同一个集合中创建新文档,但是当我将集合名称更改为locationDatalocationlocations时,它将不起作用。

这是 Firestore 规则中的问题还是可以解决这个问题?

标签: androidfirebasegoogle-cloud-firestorefirebase-security

解决方案


似乎在尝试将 dataMap 保存到 Firestore 时触发了您的更新规则。

请注意,这add()基本上是一个doc.set().

的行为set()是,如果文档已经存在,它会尝试覆盖文档,并将执行更新操作,从而触发安全规则中的更新规则。

你有两个选择:

1) 检查您尝试保存的数据是否已存在于位置集合中。

2) 将更新规则设置为允许为真,这样您就可以验证文档是否已经存在。

希望有帮助。


推荐阅读