Firebase Cloud Storage安全规则:限制自定义元数据键的正确方法
正确的Firebase存储规则配置方式
问题根源
你之前的规则失效是因为create操作时,目标资源尚未存在,resource.metadata为null,调用diff()方法会直接导致规则判断异常,最终触发权限拒绝。
两种场景的正确规则写法
场景1:必须携带a键,且不能存在其他自定义元数据键
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow create: if request.resource.metadata != null && request.resource.metadata.keys().hasOnly(['a']) && request.resource.metadata.a != null; // 可选:确保a键有实际值 } } }
场景2:可选择不携带自定义元数据,若携带则只能包含a键
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { match /{allPaths=**} { allow create: if (request.resource.metadata == null) || (request.resource.metadata.keys().hasOnly(['a'])); } } }
核心说明
request.resource.metadata:指向上传请求中附带的自定义元数据对象keys():提取元数据对象的所有键集合hasOnly(['a']):验证集合仅包含指定的键
内容的提问来源于stack exchange,提问作者Acid Coder
相关产品推荐
相关产品推荐

