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

Firestore安全规则中数值大小校验及capacity字段限制问题

嘿,这两个问题其实都是Firestore安全规则里数值校验的基础点,我来给你掰扯清楚!

1. 如何校验数值的大小?

在Firestore安全规则里,校验数值的大小超级直接——用咱们平时写代码常用的比较运算符就行:>(大于)、<(小于)、>=(大于等于)、<=(小于等于)。

唯一要注意的是,你得确保操作的是数值类型的数据,别把字符串当成数值来比(比如"1000"和2000比会出问题)。举几个实用的例子:

  • 确保提交的分数大于100:request.resource.data.score > 100
  • 确保库存数量不超过500:request.resource.data.stock <= 500
  • 限制年龄在18到65之间:request.resource.data.age >= 18 && request.resource.data.age <= 65

如果担心字段可能不存在导致规则报错,可以先判断字段存在:

allow write: if request.resource.data.hasAll(['score']) && request.resource.data.score > 100;
2. 修复capacity字段的校验规则

你现在用size()导致访问被拒绝,是因为用错方法啦!size()是用来算字符串长度、数组元素个数或者Map键值对数量的——比如"abc".size()返回3,[1,2,3].size()返回3,根本不是用来判断数值大小的。

针对你的capacity数值字段,正确的写法应该直接做数值比较:

allow write: if request.resource.data.capacity <= 200000;

要是想更严谨,防止有人传入字符串类型的数值(比如"200000")绕过规则,可以再加个类型校验:

allow write: if 
  request.resource.data.hasAll(['capacity']) &&  // 确保字段存在
  request.resource.data.capacity is number &&    // 确保是数值类型
  request.resource.data.capacity <= 200000;      // 确保数值不超过限定值

这样调整后,你的规则就能正常生效啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:03:23