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

Firebase实时数据库规则:子节点访问父级$cliente变量失败

Firebase Realtime Database 规则变量匹配权限问题解决

问题核心

你尝试通过auth.token.place == $cliente限制仅同组用户写入chats节点,但该对比始终失败——常量对比(如auth.token.place == 23)有效,变量对比无效,写入操作返回PERMISSION DENIED。

根本原因

Firebase Realtime Database的规则中,路径变量$cliente会被解析为字符串类型,而你的auth.token.place大概率是数字类型(从数据结构中clientes节点为数字ID可推测)。由于规则对类型匹配要求严格,字符串与数字直接对比会返回false,导致权限校验失败。

解决方案

将两者统一为相同类型后再对比,以下两种方式任选其一:

方式1:将$cliente转为数字

如果auth.token.place是数字类型,把路径变量转成数字后对比:

{
  "rules": {
    "clientes" : {      
      "$cliente" : {
        "tvs" : {
          ".read": true,
          ".write": false
        },    
        "chats" : 
        {
          ".read": true,
          ".write": "auth !== null && auth.token.place == parseInt($cliente)"
        }
      }
    }
  }    
}

方式2:将auth.token.place转为字符串

如果auth.token.place是字符串类型,或者你想统一用字符串对比:

{
  "rules": {
    "clientes" : {      
      "$cliente" : {
        "tvs" : {
          ".read": true,
          ".write": false
        },    
        "chats" : 
        {
          ".read": true,
          ".write": "auth !== null && String(auth.token.place) == $cliente"
        }
      }
    }
  }    
}

额外验证步骤

  • 用Firebase控制台的规则模拟器测试:模拟auth.token.place为对应类型的值,验证写入权限是否通过。
  • 确认写入代码中的id变量是否正确对应目标$cliente节点,避免路径错误导致的权限问题。

内容的提问来源于stack exchange,提问作者Guilherme Simão Couto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 09:53:30