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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 21:39:03