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

如何将Realtime Database安全规则从测试模式切换至锁定模式?

Firebase Realtime Database 按用户配置安全规则的实现步骤

前提准备

确保你的项目已经启用Firebase Authentication,安全规则依赖用户的认证UID完成权限校验。

1. 规划用户隔离的数据结构

先把数据按用户UID分区存储,推荐结构如下:

- users
  - {用户UID}
    - profile
    - settings
    - ...

每个用户的数据都被隔离在自身UID对应的节点下,便于规则精准校验。

2. 编写基础用户权限规则

在Firebase控制台的Realtime Database规则页面,替换测试规则为以下内容:

{
  "rules": {
    "users": {
      "$uid": {
        // 仅当前登录用户可读取自己的数据
        ".read": "auth.uid === $uid",
        // 仅当前登录用户可写入自己的数据
        ".write": "auth.uid === $uid"
      }
    },
    // 公共数据节点可单独配置权限
    "public": {
      ".read": true,
      ".write": false
    }
  }
}
  • $uid是规则中的通配符,匹配路径里的用户UID
  • auth.uid代表当前已登录用户的UID,仅当两者完全匹配时,才允许对应的读写操作

3. 前端适配数据读写逻辑

在应用代码中,读写数据时需用当前用户的UID作为节点键,以JS为例:

// 获取当前登录用户
const user = firebase.auth().currentUser;
if (user) {
  // 写入用户个人数据
  firebase.database().ref(`users/${user.uid}/profile`).set({
    name: "张三",
    email: user.email
  });

  // 读取用户个人数据
  firebase.database().ref(`users/${user.uid}/profile`).on('value', (snapshot) => {
    const data = snapshot.val();
    // 处理数据逻辑
  });
}

4. 验证规则有效性

使用Firebase控制台的规则模拟器做测试:

  • 模拟已登录用户:输入存在的UID,校验读写自身节点是否成功
  • 模拟未登录用户:校验读写任意用户节点是否被拒绝
  • 模拟其他用户:校验读写他人节点是否被拒绝

进阶规则示例

如果需要支持部分公开数据或管理员权限,可调整规则如下:

{
  "rules": {
    "users": {
      "$uid": {
        // 允许用户读取自身数据,或读取标记为公开的用户数据
        ".read": "auth.uid === $uid || root.child('users').child($uid).child('isPublic').val() === true",
        // 允许用户修改自身数据,或管理员修改任意数据
        ".write": "auth.uid === $uid || auth.token.admin === true"
      }
    }
  }
}
  • 给用户设置管理员权限,需在自定义认证令牌中添加admin: true字段

内容的提问来源于stack exchange,提问作者Abdullah Al Fahad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:18:05