Firebase Firestore规则配置:仅允许更新动态字段下的Like
解决方案:Firestore规则限制仅更新动态字段下的Like
你的核心问题是之前的规则没有正确识别带路径的字段键——你实际修改的是{动态名称}.Like这种完整路径的字段,而非单纯的Like,所以直接匹配['Like']不会生效。以下是符合需求的规则配置:
match /databasetest/explaura { allow read: if true; allow update: let modifiedKeys = request.resource.data.diff(resource.data).affectedKeys(); return modifiedKeys.size() > 0 && modifiedKeys.every(key => key.endsWith(".Like") && resource.data.keys().has(key.split(".")[0]) ); }
规则说明:
- 获取修改的字段路径:通过
request.resource.data.diff(resource.data).affectedKeys()拿到本次更新所有涉及的完整字段路径(比如DynamicName.Like) - 校验所有修改字段:
- 每个修改的字段必须以
.Like结尾,确保是动态字段下的Like子字段 - 分割字段路径得到的顶级动态字段名(比如
DynamicName)必须存在于原始文档中,防止用户凭空创建新的动态字段并修改其Like
- 每个修改的字段必须以
- 确保有有效修改:
modifiedKeys.size() > 0避免空更新通过校验
为什么之前的规则不生效?
你之前的规则affectedKeys().hasOnly(['Like'])是在匹配顶级字段Like,但你的代码实际修改的是嵌套路径{动态名称}.Like,两者完全不匹配,所以规则无法正确拦截或放行。
内容的提问来源于stack exchange,提问作者Lucas
相关产品推荐
相关产品推荐

