Firestore中如何检查对象键数量及用安全规则限制键数不超10?
Firestore 对象键数量检查与安全规则限制
问题1:能否像数组使用.size()方法那样,检查Firestore中对象的键的数量?
Firestore安全规则中没有直接针对对象键数量的原生.size()方法,但可以通过keys()函数间接实现——该函数会返回对象所有键组成的数组,再对这个数组调用.size()就能得到键的数量。比如针对某个嵌套对象obj,可以用keys(request.resource.data.obj).size()获取它的键数量。
问题2:能否通过安全规则限制对象键数量不超过10?
可以实现,核心思路就是利用上述keys()+.size()的组合,在安全规则中校验写入的对象键数量。
假设你要写入的文档里有一个名为targetObj的字段(对应你示例中的obj),对应的安全规则可以这样写:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /your-collection/{doc} { allow write: if keys(request.resource.data.targetObj).size() <= 10; } } }
request.resource.data代表要写入的完整文档数据keys(request.resource.data.targetObj)提取targetObj的所有键并转为数组.size() <=10限制键数量不超过10,超过则写入操作会被拒绝
这样即使客户端拦截失效,Firestore的安全规则也能从服务端层面确保对象不会无限膨胀。
内容的提问来源于stack exchange,提问作者Richardson
相关产品推荐
相关产品推荐

