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
相关产品推荐
相关产品推荐

