You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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规则的遍历方法实现动态管控:

  1. 管控嵌套对象下所有数组
    遍历嵌套对象的所有值,检查每个数组的长度:
    // 先确保Object是映射类型,再遍历所有值
    request.resource.data.Object is map &&
    request.resource.data.Object.values().every(arr => 
      arr is list && arr.size() <= 10
    )
    
  2. 管控符合特定命名模式的数组
    结合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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 20:20:17