假设我有一个包含以下内容的实时数据库:
{
"a1": {
"b1": {
"keyb11": "value11"
},
"b2": {
"keyb21": "value21"
}
}
}
然后我向 Firebase 发送了一个完整的 JSON 对象作为更新,其中只有 1 个新值(第 4 行):
{
"a1": {
"b1": {
"keyb11": "newvalue"
},
"b2": {
"keyb21": "value21"
}
}
}
用户仅具有
b1
级别的写入权限。
此更新是否应该通过 FB 规则,因为虽然在 a1 级别我们没有写入权限,但我们并没有尝试更改 a1 或 b2 集合中的任何内容?或者 FB 规则会阻止此操作,因为我们将其作为完整 JSON 对象的更新发送,包括我们没有写入权限的集合?
这种情况下,写入会失败。如果任何规则拒绝正在写入的任何值,则写入将完全失败。这可以防止从进行写入的客户端的角度来看不一致的结果。写作是“全有或全无”,否则会给应用程序带来深深的困惑。
如果您需要执行两次可能因某种原因而独立失败的写入,则应单独执行它们并检查结果。