在firebase中,我设置安全规则以保护某些节点。
问题
当我使用多路径更新同时更新多个路径时,如果一个安全规则对于任何多个路径都失败,那么整个更新将失败。
我的问题示例
假设我在我的实时数据库中有3个节点(用户,人员,任务),在android中一起更新3条路径的方法是做这样的事情:
Map multi-update =new HashMap();
multi-update.put("users/user1/name","any_name");
multi-update.put("people/user2/status", "any_status");
multi-update.put("tasks/task1/details", "any_details");
DatabaseReference root=FirebaseDatabase.getInstance().getReference();
//update
root.updateChildren(multi-update);
让我说我的规则是这样的:
"users":{
".write":"true"
}
,"people":{
".write":"true"
}
,"tasks":{
".write":"false"
}
由于任务不允许写入,因此多路径更新永远不会更新,直到所有路径都允许写入。
有人能解释为什么会这样吗?
感谢。
答案 0 :(得分:2)
以这种方式进行的同步更新是原子的:要么全部更新 成功或所有更新都失败。
因此,您所描述的问题实际上并不是问题,而是root.updateChildren(multi-update);
的预期行为
如果您的情况出现此问题,则可以更改firebase规则以授予多次更新的所有部分的权限,或者将多次更新分成几部分,以确保可以成功的部分成功。
您的另一个选择是检查这样的错误:
root.updateChildren(multi-update, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError firebaseError, DatabaseReference firebase) {
if (firebaseError != null)
{
//Update the minimum required fields
}
}
});
这方面的缺点是你不知道更新的哪一部分失败了。