Android &引用;允许创建";不适用于Firestore规则中的特定集合
我在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
match /locations/{locationID} {
allow read: if true;
allow create: if true; //Condition commented...
allow update: if <condition>;
allow delete: if false;
}
即使设置为允许创建:如果为true,也会出现相同的例外情况,即权限缺失或不足。但当我将其更改为“允许写入:如果为真”时,它会工作并添加文档
当我在规则和客户端代码中将集合名称更改为测试时,它会在同一集合中创建新文档,但当我将集合名称更改为locationData、location和locations时,它将不起作用
这是Firestore规则中的一个问题还是解决方案?似乎在尝试将数据映射保存到Firestore时触发了更新规则 请注意,
add()
基本上是一个doc.set()
set()
的行为是,如果文档已经存在,它会尝试覆盖该文档,并将执行更新操作,从而触发安全规则中的更新规则
您有两个选择:
1) 检查您试图保存的数据是否已存在于locations集合中
2) 将更新规则设置为allow true,以便您可以验证文档是否已存在
希望有帮助
database.collection("locations").add(mapData)
.addOnCompleteListener {
if (it.isSuccessful) {
//Success
} else {
//Exception
}
}