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

Firebase中限制mainsibbling与可变键slavesibbling节点的写入权限

Firebase关联节点写入权限设置方案

我来帮你搞定Firebase这两个关联节点的权限设置问题,结合你的数据结构和需求,咱们一步步梳理:

核心需求拆解

  • 允许用户创建新的mainsibblings和slavesibbling节点
  • 禁止用户覆盖/修改已存在的mainsibblings节点(如果需要禁止修改slavesibbling也可以调整)
  • 保证slavesibbling节点和对应的mainsibblings节点关联有效(即onMainSibling的值必须是真实存在的mainsibblings条目ID)

安全规则示例

以下是满足需求的Firebase安全规则,我会逐段解释:

{
  "rules": {
    "mainsibblings": {
      "$mainId": {
        // 仅允许创建新条目,禁止修改已有内容
        ".write": "!data.exists() && newData.exists()",
        // 验证提交的数据结构:必须包含MACaddress字段,且为字符串类型
        ".validate": "newData.hasChildren(['MACaddress']) && newData.child('MACaddress').isString()"
      }
    },
    "slavesibbling": {
      "$macAddress": {
        // 允许创建新MAC条目,或更新已有条目,但必须保证关联的main节点存在
        ".write": "newData.exists() && root.child('mainsibblings').child(newData.child('onMainSibling').val()).exists()",
        // 验证数据结构:必须包含onMainSibling字段,且对应main节点真实存在
        ".validate": "newData.hasChildren(['onMainSibling']) && root.child('mainsibblings').child(newData.child('onMainSibling').val()).exists()"
      }
    }
  }
}

规则细节说明

  • mainsibblings节点权限:

    • .write规则中的!data.exists()确保只有当该$mainId节点不存在时才能写入,也就是只能通过Firebase的push方法创建新条目,完全禁止修改或删除已有的mainsibblings内容。
    • .validate规则限制了提交的数据只能包含MACaddress字符串字段,避免用户提交无关数据。
  • slavesibbling节点权限:

    • 当前的.write规则允许用户创建新的MAC条目,或者更新已有的条目,但前提是onMainSibling对应的mainsibblings节点必须存在,保证关联关系的有效性。
    • 如果你想禁止更新slavesibbling的已有条目,只允许创建新的,把.write规则改成下面这样即可:
      ".write": "!data.exists() && newData.exists() && root.child('mainsibblings').child(newData.child('onMainSibling').val()).exists()"
      

这样设置后,既能满足用户创建关联节点的需求,又能有效防止不必要的覆盖操作,同时保证数据的关联性正确。

内容的提问来源于stack exchange,提问作者Joao Alves Marrucho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:31:26