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

Firebase:如何为两层随机ID深度的子节点编写安全规则

嘿,我来帮你搞定这个Firebase Realtime Database安全规则的问题!针对你描述的people/UserID1/UserID2节点结构,我整理了完全符合你需求的规则实现,还附上了详细的逻辑拆解:

完整安全规则代码
{
  "rules": {
    "people": {
      "$userId1": {
        // 控制people/$userId1节点的读写权限
        ".write": "auth.uid === $userId1 || auth.uid === $userId2",
        ".read": "auth.uid === $userId1 || auth.uid === $userId2",
        
        "$userId2": {
          // 验证该节点必须包含指定内容(示例为必填字符串字段,可按需修改)
          ".validate": "newData.hasChild('relationship') && newData.child('relationship').isString()"
        }
      }
    }
  }
}
规则逻辑拆解
  • 针对people/$userId1节点的读写权限:
    这里用.write和.read规则直接判断当前认证用户的ID(auth.uid)是否等于路径中的$userId1或$userId2——完全满足你要求的仅允许这两个用户读写该节点的需求。规则里的$userId1和$userId2是通配符,会自动匹配路径里的实际用户ID。

  • 针对people/$userId1/$userId2节点的内容验证:
    我用.validate规则来确保节点最终包含你需要的内容,示例中要求必须存在一个名为relationship的字符串字段。你可以根据实际需求修改这个条件:

    • 如果需要数值类型,改成newData.child('relationship').isNumber()
    • 如果需要固定取值,加newData.child('relationship').val() === 'friend'
    • 如果需要多个必填字段,用&&串联多个hasChild()判断
关键注意事项
  • 确保你的用户已经通过Firebase Auth完成认证,因为规则依赖auth.uid来识别用户身份,未认证的用户会被拒绝所有操作。
  • 如果你的“必须最终包含一个……”的需求有更具体的细节(比如字段名、格式要求),直接调整.validate里的逻辑即可。

内容的提问来源于stack exchange,提问作者Hasan Bou Taam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:47:27