如何校验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
相关产品推荐
相关产品推荐

