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

如何设置Firebase规则,实现仅当子节点不存在时才允许写入?

现有规则失效原因

  1. 路径不匹配:你把规则配置在/NEWS根节点,但实际写入的是/NEWS/[语言]/[电影名称]的深层子节点,规则判断逻辑没有适配实际操作的路径层级
  2. 判断逻辑错误:在/NEWS节点的write规则中,data本身就指向/NEWS节点的已有数据,你额外调用parent().child('NEWS')属于重复操作,更关键的是只要/NEWS下曾经存在过任意内容,这个判断条件就永远为假,自然无法写入

适配需求的正确规则配置

{
  "rules": {
    "NEWS":{
       ".read": "auth.uid!==null",         
       "$language": {
         "$filmName": {
           // 仅当当前电影对应的资讯节点不存在、且用户已登录时允许写入
           ".write": "auth.uid!==null && !data.exists()"
         }
       }
    }
  }
}
  • 通配符$language和$filmName可以匹配你代码中动态的语言、电影名称路径层级
  • 这里的data指向你实际操作的/NEWS/[语言]/[电影名称]节点的已有数据,!data.exists()正好对应你代码中snapshot.getChildrenCount() == 0的判断逻辑,完全匹配你“节点不存在时才允许恢复写入”的需求
  • 如果你后续需要允许用户在节点存在后也能追加新的资讯内容,直接把write规则简化为auth.uid!==null即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:24:01