Firebase实时数据库规则级联效应:含无权路径的更新能否通过校验?
Firebase实时数据库权限校验问题解析
原数据库内容
{ "a1": { "b1": { "keyb11": "value11" }, "b2": { "keyb21": "value21" } } }
提交的更新内容
{ "a1": { "b1": { "keyb11": "newvalue" }, "b2": { "keyb21": "value21" } } }
权限校验结果及原因
这个更新会被拦截。
Firebase实时数据库处理完整JSON对象更新时,会将整个提交的对象视为待写入内容——哪怕b2的值和原有数据完全一致,规则校验仍会检查你是否拥有提交对象中所有路径的写入权限。由于用户仅拥有b1层级的写入权限,提交包含b2路径的完整对象时,规则会判定你无权操作b2路径,因此整个更新请求会被拦截。
正确的操作方式是仅提交需要修改的路径部分,比如只发送:
{"a1": {"b1": {"keyb11": "newvalue"}}}
或者更精准的:
{"a1/b1/keyb11": "newvalue"}
这样规则只会校验b1路径的权限,就能通过校验。
内容的提问来源于stack exchange,提问作者Marty
相关产品推荐
相关产品推荐

