我允许用户将复杂的对象存储到实时数据库,但考虑到可能出现恶作剧,我担心我的存储配额。在之前的项目中,我已经能够通过使用字符串长度显式定义每个键来按长度限制值:
".validate": "newData.isString() && newData.val().length < 512"
但是,我当前的对象有大量嵌套键和字符串,我宁愿只限制每个对象存储 1MiB 就可以了。 Firebase 能够计算数据库大小并相应地向我收费,如果可能的话,我想在我的计算中访问它。比如:
".validate": "newData.isObject() && newData.usage().storage < 1048576"
我试图避免创建一个云函数来检查每个写入,然后
JSON.stringify(obj).length
处理每个对象的长度并锁定帐户或类似的东西。是否有我可能缺少的安全规则可以实现限制对象大小?
安全规则中没有内置对象大小。在 Cloud Functions 中通过调用
JSON.stringify()
来执行此操作似乎是最合乎逻辑的方法。
如果您已知架构,则可以使用
.validate
您可以帮助自己使用 Bolt 编译器实现复杂类型验证https://firebaseopensource.com/projects/firebase/bolt/