代码之家  ›  专栏  ›  技术社区  ›  Nina

Firebase规则仅对一个节点启用

  •  0
  • Nina  · 技术社区  · 2 年前

    我使用的是Firebase实时数据库,只想为一个节点(“设备/{数字}”)设置一个规则。对于所有其他路径,我希望规则保持阅读状态,写下:true。

    这是我尝试过的:

    {
      "rules": {
        "Devices": {
          ".write": "!data.exists()"
        },
      }
    }
    

    然而,这并不能实现我想要的,因为它不允许在任何其他路径上进行写/读。 如果我尝试这样做:

    {
      "rules": {
        ".read": true,
        ".write": true,
        "Devices": {
          ".write": "!data.exists()"
        },
      }
    }
    

    然后设备下的规则不起任何作用,您可以删除设备下的数据。

    我该如何解决这个问题?

    1 回复  |  直到 2 年前
        1
  •  1
  •   Frank van Puffelen    2 年前

    你正在寻找 wildcard rule ,如下所示:

    {
      "rules": {
        "Devices": {
          ".write": "!data.exists()"
        },
        "$other": {
          ".read": true,
          ".write": true
        },
      }
    }
    

    这适用于 !data.exists() 规则到 Devices true 到所有其他顶级节点。


    如果要允许用户仅在下添加特定设备 设备 ,而不是替换整个节点,您也应该为此使用通配符:

    {
      "rules": {
        "Devices": {
          "$deviceId": {
            ".write": "!data.exists()"
          }
        },
        "$other": {
          ".read": true,
          ".write": true
        },
      }
    }