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

Firebase实时数据库安全规则配置报错及读写权限问题求助

Firebase实时数据库规则解决方案

数据结构参考

先明确高分数据的存储结构(可根据你的游戏需求调整):

{
  "highscores": {
    "level_1": {
      "user_xyz789": {
        "score": 920,
        "timestamp": 1695000000,
        "userId": "user_xyz789"
      }
    }
  },
  "admins": {
    "admin_123xyz": true // 存储管理员UID,值设为true即可
  }
}

符合需求的规则配置

替换你的数据库规则为以下代码,可直接解决「特殊字符报错」和「读写权限问题」:

{
  "rules": {
    "highscores": {
      ".read": true, // 全员可读
      "$levelId": {
        "$userId": {
          ".write": "
            // 全员新增数据:仅当数据不存在,且结构合法时允许
            (!data.exists() && 
              auth != null &&
              newData.hasChildren(['score', 'timestamp', 'userId']) &&
              newData.child('score').isNumber() && newData.child('score').val() > 0 &&
              newData.child('timestamp').isNumber() &&
              newData.child('userId').val() === $userId
            ) || 
            // 仅管理员可修改已有数据
            (data.exists() && root.child('admins').child(auth.uid).exists())
          "
        }
      }
    },
    "admins": {
      ".read": false,
      ".write": "root.child('admins').child(auth.uid).exists()" // 仅现有管理员可添加新管理员
    }
  }
}

问题排查与修复

「字符串不能包含特殊字符」报错修复

  • 规则中所有字符串必须用双引号包裹,禁止使用单引号
  • 若需在字符串内嵌套双引号,要加反斜杠转义(例:"提示:\"分数必须为正整数\"")
  • 正则表达式中的特殊字符(如^、$)无需额外转义,直接写在双引号内即可

应用无法读写问题修复

  1. 认证检查:规则中新增数据要求auth != null,确保你的游戏已集成Firebase认证(匿名登录、邮箱登录均可),未认证用户无法新增数据
  2. 数据结构校验:新增高分时必须传入score(正整数)、timestamp(时间戳数字)、userId(与节点路径的$userId一致),缺少字段或类型错误会被规则拦截
  3. 管理员权限:修改已有数据前,需将操作用户的UID添加到admins节点中,否则会被拒绝
  4. 模拟器测试:用Firebase控制台的「规则模拟器」分别测试普通用户、管理员的读写操作,快速定位权限拒绝的具体原因

测试场景验证

  • 普通认证用户:可读取所有关卡高分,可新增自己的高分记录,无法修改任何已有数据
  • 管理员用户:可读取、新增、修改任意关卡的任意高分记录
  • 未认证用户:仅能读取数据,无法新增或修改

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 21:23:18