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

如何编写Firebase安全规则函数,限制嵌套对象大小并满足合规要求

Firebase Firestore安全规则:嵌套数据结构大小约束实现

需求概述

需通过安全规则强制执行以下嵌套数据的层级大小限制:

  • 根级对象最多包含2个键
  • 每个根级键对应的子对象最多包含12个键
  • 所有子键对应的value必须是数组,且数组元素数量不超过7个

示例数据结构

// 符合约束的示例数据
data: { 
  // 根级最多2个键
  key1: {
    // 第二层最多12个键
    subId1: [], // 数组最多7个元素
    subId2: [],
    // ... 最多到subId12
  },
  key2: { /* 结构同key1 */ }
}

完整安全规则实现

service cloud.firestore {
  match /databases/{database}/documents {
    match /yourCollection/{document} {
      // 读写权限依赖数据合法性校验
      allow read, write: if isValidData(request.resource.data);
      
      // 核心校验函数
      function isValidData(data) {
        // 1. 根级对象最多2个键
        return data.size() <= 2
          // 2. 遍历所有根级键,校验每个子对象的规则
          && data.values().every(rootValue => 
              // 子对象最多12个键
              rootValue.size() <= 12
              // 子对象的所有value必须是数组,且数组长度≤7
              && rootValue.values().every(subValue => 
                  subValue is list 
                  && subValue.size() <= 7
                )
            );
      }
    }
  }
}

规则细节说明

  1. 根级约束:通过data.size() <= 2限制根对象的键数量不超过2个。
  2. 第二层对象约束:使用data.values().every(...)遍历所有根级值,通过rootValue.size() <= 12限制每个子对象的键数量。
  3. 数组约束:再次遍历第二层对象的所有值,通过subValue is list确保类型为数组,同时subValue.size() <=7限制数组元素数量。

可选扩展:子键名称校验

如果需要限制第二层的键必须是subId1到subId12,可以在第二层校验中添加键名验证:

// 在rootValue的校验中加入
&& rootValue.keys().hasOnly([
    'subId1', 'subId2', 'subId3', 'subId4', 
    'subId5', 'subId6', 'subId7', 'subId8', 
    'subId9', 'subId10', 'subId11', 'subId12'
  ])

内容的提问来源于stack exchange,提问作者Richardson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 18:53:10