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

resource.data与request.resource.data是否相同?Firebase安全规则相关疑问

Firebase安全规则request.resource.data与resource.data差异说明

两个核心变量的明确定义

  • resource.data:指向数据库中当前已存在的对应文档的原始数据,仅在操作已存在的文档(更新、删除)时可用,文档创建(create)操作中该变量不存在。
  • request.resource.data:指向本次请求最终要写入文档的完整数据,创建、更新操作均可用:如果是创建操作,值为用户提交的全部新数据;如果是更新操作,值为原有文档数据与用户提交的更新字段合并后的完整新数据。

测试异常原因说明

你在模拟器中观测到两者始终相等,基本是测试操作不规范导致的,常见错误场景有两种:

  1. 测试时误选了已存在的文档路径执行更新操作,且提交的更新内容和原有文档数据完全一致,才会出现两个变量值相同的情况。
  2. 测试创建规则时,实际选择的是已经预置了模拟数据的文档路径,触发的是更新规则而非创建规则。

官方代码逻辑解释

你提到的官方代码是作用于allow create规则下的,而创建操作中resource.data本身不存在,完全不可能校验已有数据:

allow create: if 
request.resource.data.score is number &&
request.resource.data.score >=1 &&
request.resource.data.score <=5

这段规则就是校验用户本次提交要写入的score字段必须是1到5之间的数字,完全符合限制餐厅评分范围的需求。

逻辑验证方法

你可以按以下操作复现正确逻辑:

  • 选择一条不存在的文档路径测试创建操作,提交score为6的写入请求,会触发规则拦截,即可确认校验的是新提交的数据。
  • 针对已有文档测试更新操作,提交和原有score值不同的写入请求,可观测到request.resource.data.score与resource.data.score值存在差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:36:02