You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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])
                       );
}

规则说明:

  1. 获取修改的字段路径:通过request.resource.data.diff(resource.data).affectedKeys()拿到本次更新所有涉及的完整字段路径(比如DynamicName.Like)
  2. 校验所有修改字段:
    • 每个修改的字段必须以.Like结尾,确保是动态字段下的Like子字段
    • 分割字段路径得到的顶级动态字段名(比如DynamicName)必须存在于原始文档中,防止用户凭空创建新的动态字段并修改其Like
  3. 确保有有效修改:modifiedKeys.size() > 0避免空更新通过校验

为什么之前的规则不生效?

你之前的规则affectedKeys().hasOnly(['Like'])是在匹配顶级字段Like,但你的代码实际修改的是嵌套路径{动态名称}.Like,两者完全不匹配,所以规则无法正确拦截或放行。

内容的提问来源于stack exchange,提问作者Lucas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:07:13