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

如何正确配置Firebase多级账户访问读写权限规则

Firebase实时数据库权限规则修复方案

现有结构与需求

数据库结构

{
  "agencies": {
    "a7x6BwW2GDb34sZYiLSDpzApNw03": {
      "businessInfo": {},
      "clients": {
        "V33meLCYD0Q3NATokZNBTxIH1jr2": {
          "businessInfo": {}
        },
        "uRj7uSjVfxNhwG2J5geTlkUUBtC3": {
          "businessInfo": {}
        }
      }
    },
    "b5riE7yoQEhWabFQn4ZKixTS5513": {
      "businessInfo": {},
      "clients": {
        "A0EwYmU9PLWqnJNIJJ7bvAmvn0F2": {
          "businessInfo": {}
        },
        "XO43avp90NNKo9aQSSilk0pjDvv1": {
          "businessInfo": {}
        }
      }
    }
  }
}

权限控制要求

  • 每个代理商(Agency)拥有其名下所有客户Business Info的读写权限
  • 每个客户(Client)仅拥有自身Business Info的读写权限
    补充说明:所有代理商和客户均持有独立登录账号,拥有独立的账户访问权限。

原有规则缺陷

原有规则存在两个核心问题:

  1. 路径变量命名冲突:agencies层级和clients层级的动态节点都命名为$uid,下层变量会覆盖上层变量,导致规则无法获取当前客户所属的代理商ID
  2. 客户节点的读写规则仅校验了客户自身ID,没有加入所属代理商的权限判断,导致代理商访问名下客户数据时被拦截

原有规则代码:

{
  "rules": {
    "agencies": {
      "$uid": {
        "businessInfo": {
          ".read": "$uid === auth.uid",
          ".write": "$uid === auth.uid"
        },
        "clients": {
          "$uid": {
            "businessInfo": {
              ".read": "$uid === auth.uid",
              ".write": "$uid === auth.uid"
            }
          }
        }
      }
    }
  }
}

正确规则配置

{
  "rules": {
    "agencies": {
      "$agencyId": {
        "businessInfo": {
          ".read": "$agencyId === auth.uid",
          ".write": "$agencyId === auth.uid"
        },
        "clients": {
          "$clientId": {
            "businessInfo": {
              ".read": "auth.uid === $agencyId || auth.uid === $clientId",
              ".write": "auth.uid === $agencyId || auth.uid === $clientId"
            }
          }
        }
      }
    }
  }
}

规则说明

  • 重命名动态路径变量区分身份:agencies层级动态节点命名为$agencyId对应当前路径的代理商ID,clients层级动态节点命名为$clientId对应当前路径的客户ID,从根源解决变量覆盖问题
  • 客户业务信息节点的读写规则采用或逻辑判断:满足「当前登录用户是所属代理商」、「当前登录用户是客户本人」两个条件任意一个,即可获得对应节点的读写权限
  • 代理商自身的businessInfo节点权限保持不变,仅代理商本人可读写

测试验证

使用提供的测试请求验证:

  • 测试登录用户uid:a7x6BwW2GDb34sZYiLSDpzApNw03(代理商身份)
  • 访问路径:/agencies/a7x6BwW2GDb34sZYiLSDpzApNw03/clients/V33meLCYD0Q3NATokZNBTxIH1jr2/businessInfo
  • 规则校验逻辑:路径中$agencyId值为a7x6BwW2GDb34sZYiLSDpzApNw03,与当前登录用户uid完全匹配,请求会被正常放行,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:06:22