Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android &引用;允许创建";不适用于Firestore规则中的特定集合_Android_Firebase_Google Cloud Firestore_Firebase Security - Fatal编程技术网

Android &引用;允许创建";不适用于Firestore规则中的特定集合

Android &引用;允许创建";不适用于Firestore规则中的特定集合,android,firebase,google-cloud-firestore,firebase-security,Android,Firebase,Google Cloud Firestore,Firebase Security,我在Firestore中有一个数据库,其中包含我已定义的具有读取、创建、更新和删除操作的安全规则的集合数 直到周六中午,所有具有给定条件的规则都允许读取和写入集合中的数据,但突然之后,在一个名为“位置”的特定集合中,授予权限被拒绝仅在同一集合中创建文档,但读取、更新和删除作品除外 所以我改变了该集合的规则,如下面的测试 match /locations/{locationID} { allow read: if true; allow create: if true; //Con

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

直到周六中午,所有具有给定条件的规则都允许读取和写入集合中的数据,但突然之后,在一个名为“位置”的特定集合中,授予权限被拒绝仅在同一集合中创建文档,但读取、更新和删除作品除外

所以我改变了该集合的规则,如下面的测试

match /locations/{locationID} {
    allow read: if true;
    allow create: if true; //Condition commented...
    allow update: if <condition>;
    allow delete: if false;
}
即使设置为允许创建:如果为true,也会出现相同的例外情况,即权限缺失或不足。但当我将其更改为“允许写入:如果为真”
时,它会工作并添加文档

当我在规则客户端代码中将集合名称更改为测试时,它会在同一集合中创建新文档,但当我将集合名称更改为locationDatalocationlocations时,它将不起作用


这是Firestore规则中的一个问题还是解决方案?

似乎在尝试将数据映射保存到Firestore时触发了更新规则

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

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

您有两个选择:

1) 检查您试图保存的数据是否已存在于locations集合中

2) 将更新规则设置为allow true,以便您可以验证文档是否已存在

希望有帮助

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