Firestore:如何通过firestore.rules实现创建文档时的文档名粒度校验
Firestore 规则实现文档名强制约束方案
以下是可直接复用的规则配置,无需额外云函数即可实现需求:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { // 替换为你实际需要约束的集合名称 match /<目标集合名称>/{documentId} { allow create: if request.auth != null // 取UID前3位与文档ID最后3位做全等校验 && request.auth.uid[0:3] == request.resource.id[-3:]; } } }
规则逻辑说明
- 首先校验用户处于已登录状态,避免无登录态时读取UID抛出异常
request.auth.uid[0:3]用于截取当前登录用户UID的前3个字符,Firebase官方生成的UID固定为28位长度,不会出现切片越界问题request.resource.id[-3:]用于截取当前待创建文档ID的最后3个字符,负索引代表从字符串末尾开始计数- 两个截取结果完全相等时才允许创建文档,完全匹配要求的约束逻辑
验证效果
当用户UID为
XXXcqwrrqweqwe时:
- 文档名为
24rrqsdferXXX:最后三位为XXX,和UID前三位一致,创建请求放行- 文档名为
werfsdfsdfXXY:最后三位为XXY,和UID前三位不一致,创建请求拒绝
注意事项
- 需将规则中的
<目标集合名称>替换为实际要约束的集合名称,如果要约束多个集合,可复制对应规则块分别配置 - 该规则仅限制创建操作,Firestore文档ID创建后不可修改,因此一般不需要额外配置更新权限
- 不要依赖客户端传入的自定义字段做文档ID校验,直接读取
request.resource.id是最安全的方案,不会被客户端伪造篡改
内容的提问来源于stack exchange,提问作者radulle
相关产品推荐
相关产品推荐

