如何限制Firebase Storage中图片的存储数量?
问题分析与解决方案
原规则失效原因
你编写的规则无法限制图片数量,核心问题在于:Firebase Storage的安全规则中,list()方法不能在write规则里用于统计已有文件数量。规则执行是原子性的,写入新文件时,list(/images/logo/{userId})无法实时获取包含新文件的总数,且该方法的设计场景是在读取规则中控制文件列表的访问权限,而非写入时的计数校验,直接导致数量限制条件完全失效。
正确解决方案
要实现用户图片数量限制,必须借助Firebase数据库(Firestore或实时数据库)维护用户的图片计数,再在Storage规则中校验该计数。
步骤1:用Firestore维护计数
在Firestore中创建user_image_counts集合,每个文档ID对应用户的userId,文档内添加count字段,初始值设为0,用于记录该用户已上传的图片数量。
步骤2:修改Storage规则
allow write: if request.resource.size < 1 * 1024 * 1024 && request.resource.contentType.matches('image/.*') && get(/databases/(default)/documents/user_image_counts/{userId}).data.count < 1; }``` ### 步骤3:同步计数(必须操作) 上传/删除图片后,需要通过云函数或客户端事务更新`user_image_counts`中的`count`值: - 上传成功后,将`count`加1 - 删除图片后,将`count`减1 以此保证规则中的计数与实际文件数量一致。 内容的提问来源于stack exchange,提问作者kamil danilski
相关产品推荐
相关产品推荐

