如何为Firebase嵌套对象内的数组设置动态安全规则?
Firebase嵌套对象内数组的安全规则管控
一、管控固定名称嵌套数组的长度
完全可以通过安全规则管控嵌套数组的长度,你当前的写法需要调整细节:
- 确保嵌套对象和数组的引用路径正确,若字段名是普通名称,正确写法示例:
// 限制nestedArr长度等于5 request.resource.data.Object.nestedArr.size() == 5 - 如果字段名包含特殊字符或与Firebase规则关键字冲突,改用方括号语法:
request.resource.data['Object']['nestedArr'].size() <= 10 - 必须先确认目标值是数组类型,避免非数组值触发规则错误:
request.resource.data.Object.nestedArr is list && request.resource.data.Object.nestedArr.size() <= 10
二、动态数组名称的规则设置
如果数组名称不固定,可以通过Firebase规则的遍历方法实现动态管控:
- 管控嵌套对象下所有数组
遍历嵌套对象的所有值,检查每个数组的长度:// 先确保Object是映射类型,再遍历所有值 request.resource.data.Object is map && request.resource.data.Object.values().every(arr => arr is list && arr.size() <= 10 ) - 管控符合特定命名模式的数组
结合keys()方法筛选目标数组,比如只限制名称以arr_开头的数组:request.resource.data.Object is map && request.resource.data.Object.keys().every(key => key.startsWith("arr_") ? (request.resource.data.Object[key] is list && request.resource.data.Object[key].size() <= 10) : true // 非目标数组不做限制 )
注意事项
- 若
Object字段可能不存在,需先判断其存在性:request.resource.data.has('Object') size()方法仅适用于数组(list)和映射(map),必须先做类型校验,否则规则会抛出错误。
内容的提问来源于stack exchange,提问作者Richardson
相关产品推荐
相关产品推荐

