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

Firebase规则配置问题:仅评论所有者删除节点操作失败

解决Firebase评论删除时的权限规则问题

嘿,我懂你现在遇到的棘手问题了!当前的规则在创建评论时能正常工作,但删除操作因为没有newData(删除节点时该节点会被移除,自然不存在newData),导致newData.child('posterid')的判断直接失效,这就是删除被拒绝的核心原因。

问题根源分析

你现有的规则把创建、修改、删除的权限判断混在了一起,但删除操作的特性是不存在newData,所以没法通过newData去获取posterid做校验。这时候我们需要针对删除场景单独处理:去检查要删除的原有评论数据里的posterid是否等于当前用户的auth.uid。

修改后的规则代码

"infinity_comments": {
  "country": {
    "$countryid": {
      "$postid": {
        "$pushid": {
          ".write": "
            // 场景1:创建评论,要求新数据的posterid等于当前用户ID
            (!data.exists() && newData.child('posterid').val() == auth.uid) || 
            // 场景2:删除评论,要求原有数据的posterid等于当前用户ID(删除时无newData)
            (data.exists() && !newData.exists() && data.child('posterid').val() == auth.uid) ||
            // 可选场景:如果需要支持修改评论,保留这个条件确保只有所有者能修改
            (data.exists() && newData.exists() && data.child('posterid').val() == auth.uid)
          "
        }
      }
    }
  }
}

规则逻辑拆解

  • 创建评论:当目标节点不存在时,要求新提交的评论数据里posterid必须匹配当前登录用户ID,保证只有用户自己能创建属于自己的评论。
  • 删除评论:当目标节点存在且没有新数据(即删除操作)时,校验原有评论的posterid是否等于当前用户ID,这样删除时不需要传递任何额外数据,只要你是评论所有者就能执行删除。
  • 修改评论:如果需要开放评论修改权限,可以保留第三个条件,确保只有评论所有者能修改自己的内容。

小提醒

确保你的删除操作是直接针对具体的$pushid节点发起的(比如删除/infinity_comments/country/US/post123/comment456),而不是批量删除父节点,这样规则才能精准匹配到对应的评论数据,完成posterid的校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:28:19