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

Firebase实时数据库规则问题:仅创建者无法读取自身数据

问题原因与修复方案

问题根源

你的查询是直接请求/categories节点(带排序过滤),但当前规则仅给了/$category_id子节点的读取权限,Firebase会优先检查/categories节点本身的读取权限——由于该节点没有配置.read规则,直接返回权限拒绝。

修复后的规则

{
  "rules": {
    "categories": {
      ".indexOn": ["creator"],
      // 允许列表查询,但强制按creator过滤且值匹配当前用户UID
      ".read": "auth != null && query.orderByChild == 'creator' && query.equalTo == auth.uid",
      "$category_id": {
        ".read": "data.child('creator').val() === auth.uid",
        // 优化写入规则:仅登录用户可创建,且creator必须设为自身UID
        ".write": "!data.exists() && auth != null && newData.child('creator').val() === auth.uid"
      }
    },
    "ideas": {
      ".indexOn": ["creator"],
      ".read": "auth != null && query.orderByChild == 'creator' && query.equalTo == auth.uid",
      "$idea_id": {
        ".read": "data.child('creator').val() === auth.uid",
        ".write": "!data.exists() && auth != null && newData.child('creator').val() === auth.uid"
      }
    }
  }
}

规则说明

  1. 列表查询权限:在categories/ideas根节点添加.read规则,确保:
    • 用户已登录(auth != null)
    • 查询必须按creator字段排序
    • 查询过滤值严格等于当前用户UID
      这就保证了用户只能拉取自己创建的数据列表。
  2. 单个节点权限:保留子节点的.read规则,支持单独读取自己创建的单条数据。
  3. 写入规则加固:新增登录校验和creator字段匹配校验,避免未登录用户创建数据,或创建时篡改creator值。

模拟器验证注意事项

测试时需在模拟器的查询参数中添加:

  • orderByChild: creator
  • equalTo: Codw8lfHuDcUox1Xe4ima15OGXi1(你的测试UID)
    再发起/categories路径的get请求,即可通过规则验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 01:00:57