Firestore Security Rules数据校验:如何拒绝含未知额外字段的写入请求
实现方案
你可以通过Firestore安全规则内置的keys()和hasOnly()方法组合校验,直接限制写入的字段只能是name:
match /my-data/{userId} { allow write: if request.resource.data.keys().hasOnly(["name"]) && "name" in request.resource.data; }
规则说明
request.resource.data.keys():获取本次写入请求携带的所有字段名集合hasOnly(["name"]):校验所有字段名都只能是传入数组内的取值,只要存在任意额外字段就会返回false- 保留
"name" in request.resource.data是为了避免空写入请求(没有携带任何字段)被误放通,确保name字段必须存在
适配部分更新场景
如果你需要兼容patch类型的更新操作,要求更新时也只能修改name、不能新增/修改其他字段,可以改用如下规则,只校验本次更新涉及的字段:
match /my-data/{userId} { allow write: if request.resource.data.diff(resource.data).affectedKeys().hasOnly(["name"]) && "name" in request.resource.data; }
内容的提问来源于stack exchange,提问作者Solsiden
相关产品推荐
相关产品推荐

