能否在Storage Rule中调用Cloud Function读取Realtime Database数据做权限校验
结论
Firebase Storage Rules 原生不支持直接调用自定义函数,也无法直接读取 Realtime Database 中的数据,你的需求无法通过直接在 Storage Rule 中编写逻辑实现,可采用以下替代方案满足校验需求:
- 方案1:将存储大小统计值同步到 Cloud Firestore
目前 Storage Rules 原生支持通过get()方法读取同项目下 Firestore 的文档数据,你可以把原本同步到 Realtime Databasexxx节点的文件夹大小值,额外同步一份到 Firestore 的指定文档中,即可在 Storage Rules 中直接读取该值做判断,参考规则写法:allow write: if get(/databases/(default)/documents/stats/xxx_folder).data.total_size < 1024 * 1024 * 100; - 方案2:通过签名URL做上传前置校验
调整上传链路,客户端不再直接调用SDK上传到Storage,改为先请求你部署的HTTPS Cloud Function,函数内部先读取Realtime Databasexxx节点的大小值,确认符合上传条件后生成Storage签名上传URL返回给客户端,客户端仅通过该URL完成上传,从链路层面拦截不符合条件的上传请求。 - 方案3:事后兜底校验
不做上传前置拦截,配置Storage的onFinalize事件触发Cloud Function,用户上传完成后函数重新计算文件夹总大小,如果超出阈值直接删除刚上传的文件,同时更新Realtime Database中的统计值,该方案实现成本最低但属于事后处理,适合对上传校验实时性要求不高的场景。
内容的提问来源于stack exchange,提问作者abusaeed2433
相关产品推荐
相关产品推荐

