阻止数据删除但允许在firebase实时数据库中添加和修改?

时间:2018-01-12 00:09:42

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

我需要设置数据库规则以防止意外删除某些子节点,但同时允许添加和修改子节点。有问题的节点是users/[userID]。它的结构如下:

enter image description here

我不希望删除users/[userID]/soundcasts中的数据。我目前的规则如下:

 "users": {
  ".read": true,
  ".indexOn": "stripe_id",
  "$userID": {        
    ".indexOn": "0",
    "soundcasts": {
      ".indexOn": "planID",  
      ".write": "newData.exists() && auth != null",
      "$soundcastID": {
         ".write": "newData.exists() && auth != null",
      } 
    },
  }  
},

这可以成功完成我想要的,即将users/[userID]/soundcasts设置为null始终失败。但是,由于users节点本身没有.write规则,我无法向节点添加新用户:(

但是如果我在".write": "newData.exists() && auth != null"节点或users节点上设置users/[userID],就像这样:

 "users": {
  ".read": true,
  ".indexOn": "stripe_id",
  "$userID": {        
    ".indexOn": "0",
    ".write": "newData.exists() && auth != null",
    "soundcasts": {
      ".indexOn": "planID",  
      ".write": "newData.exists() && auth != null",
      "$soundcastID": {
         ".write": "newData.exists() && auth != null",
      } 
    },
  }  
},

可以将users/[userID]/soundcasts子节点设置为null。我不确定为什么会这样。

我需要设置规则,以便我可以向users节点添加新用户,修改users/[userID]下的任何子节点数据,但阻止设置users/[userID]/soundcasts为空。

这可能吗?

1 个答案:

答案 0 :(得分:0)

目前无法为节点设置写入规则,也无法为其子节点设置另一组不同的规则。

我建议在数据库的根节点下创建一个节点soundcasts来存储这些soundcast,将userID作为关键字并在每个用户下进行声音播放。然后,您可以将“无删除”规则设置为此节点:

"users": {
  ".read": true,
  ".indexOn": "stripe_id",
  "$userID": {
    ".write": true
  }  
},
"soundcasts":{
    ".indexOn":"planID",
    "$userID":{
        "$soundcastID": {
            ".write": "newData.exists() && auth != null",
        }
    }
}