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

Firestore安全规则验证:确保写入时counter递增且允许首次创建

Firestore安全规则问题分析与修正

你的规则逻辑方向是对的,但存在几个关键问题,会导致功能不符合预期甚至报错:

现有规则的问题

  1. write操作范围混淆:Firestore的write包含create、update、delete三类操作,你单独定义了allow create,但allow write依然会覆盖部分场景。更关键的是,当执行create时,resource.data(文档现有数据)不存在,resource.data.counter会直接触发规则报错。
  2. 未处理删除操作:如果不需要允许删除文档,当前规则没有限制,可能导致误删。
  3. userId变量需确认定义:规则里的userId必须提前正确定义(比如从文档路径参数或请求数据中获取),否则规则会失效。

修正后的规则

// 首次创建文档:仅验证身份和timestamp,counter无递增要求
allow create: if request.auth != null 
  && request.auth.uid == userId
  && request.resource.data.timestamp == request.time;

// 更新文档:必须满足counter递增,同时验证身份和timestamp
allow update: if request.auth != null 
  && request.auth.uid == userId
  && request.resource.data.timestamp == request.time
  && request.resource.data.counter > resource.data.counter;

// 禁止删除操作(若业务允许删除,可替换为对应验证条件)
allow delete: if false;

关键说明

  • 拆分create和update操作,避免创建时访问不存在的resource.data导致的错误
  • 明确限制delete操作,根据实际业务需求调整规则逻辑
  • 确保userId变量已正确绑定(比如你的文档路径是users/{userId}/docs/{docId},则可以定义let userId = request.auth.uid;或者let userId = path.params.userId;,需匹配你的数据结构)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:42:17