Firebase数据库规则允许在特定节点上写

时间:2018-10-22 15:18:25

标签: firebase firebase-realtime-database firebase-security-rules

我有以下数据库:

actions : [  {
  "added" : 1535293085383,
  "countdown" : 9999999999,
  "item" : 1,
  "type" : "a"
}, {
  "added" : 1535293085383,
  "countdown" : 999999999,
  "extra" : "bb",
  "item" : "2",
  "type" : "b"
}, {
  "added" : 1635293085383,
  "countdown" : 1,
  "item" : 3,
  "type" : "c"
}]

我希望所有登录的用户都能够读取所有数据,但只能写入倒数节点。

我的想法是,每当用户读取数据时,该值就会减少,但不允许他们更新任何其他节点

有我写的规则

    {
       "rules":{
          ".read":false,
          ".write":false,
          "actions":{
             ".indexOn":[
                "added"
             ],
             ".read": "auth != null",
           "countdown":{
             ".write" : "auth != null"
           }
          }
}

它拒绝未经身份验证的用户读取内容
允许从经过身份验证的用户读取信息
甚至拒绝在倒数节点中从经过身份验证的用户写信

我该如何解决

1 个答案:

答案 0 :(得分:2)

您缺少安全规则中的某个级别。现在,您允许写入/actions/countdown。但是您希望允许写入/actions/*/countdown。要捕获该要求,请在规则中使用$变量:

{
   "rules":{
      ".read":false,
      ".write":false,
      "actions":{
         ".indexOn": [ "added" ],
         ".read": "auth != null",
         "$actionid": {
           "countdown":{
             ".write" : "auth != null"
           }
         }
      }
}

现在由于$actionid下的countdown/.write规则适用于/actions的每个子节点。