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

如何校验Firestore文档中新增随机UUID字段的结构合规性?

Firestore安全规则:校验随机UUID字段的Map结构

要校验以随机UUID为字段名的Map结构,你可以借助Firestore安全规则的request.writeFields和自定义函数实现,具体方案如下:

1. 定义校验辅助函数

先创建两个函数:一个用于校验单个用户Map的结构,另一个可选的UUID格式校验函数(用于增强安全性):

function isValidUserMap(userMap) {
  return userMap is map
    && userMap.name is string
    && userMap.age is number;
}

// 可选:校验字段名是否符合UUID v4格式
function isValidUUID(uuid) {
  return uuid.matches('^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$');
}

2. 编写更新权限规则

在对应文档的allow update规则中,通过request.writeFields获取本次更新的所有字段名(即你生成的随机UUID),逐一校验每个字段的格式和对应Map的结构:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /your-collection/{doc} { // 替换为你的实际集合名
      function isValidUserMap(userMap) {
        return userMap is map
          && userMap.name is string
          && userMap.age is number;
      }

      function isValidUUID(uuid) {
        return uuid.matches('^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$');
      }

      allow update: if 
        // 确保所有更新的字段都是合法UUID
        request.writeFields.every(field => isValidUUID(field))
        // 确保每个UUID对应的Map符合结构要求
        && request.writeFields.every(field => isValidUserMap(request.resource.data[field]));
    }
  }
}

规则说明

  • request.writeFields:返回本次更新中被新增或修改的字段名数组,刚好对应你生成的随机UUID。
  • every方法:遍历数组中的每个字段,确保所有字段都满足校验条件。
  • 若不需要校验UUID格式,可以直接去掉isValidUUID相关的判断逻辑,只保留Map结构的校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 04:45:10