我需要设置数据库规则以防止意外删除某些子节点,但同时允许添加和修改子节点。有问题的节点是users/[userID]
。它的结构如下:
我不希望删除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
为空。
这可能吗?
答案 0 :(得分:0)
目前无法为节点设置写入规则,也无法为其子节点设置另一组不同的规则。
我建议在数据库的根节点下创建一个节点soundcasts
来存储这些soundcast,将userID
作为关键字并在每个用户下进行声音播放。然后,您可以将“无删除”规则设置为此节点:
"users": {
".read": true,
".indexOn": "stripe_id",
"$userID": {
".write": true
}
},
"soundcasts":{
".indexOn":"planID",
"$userID":{
"$soundcastID": {
".write": "newData.exists() && auth != null",
}
}
}