我试图实现验证规则,该规则将检查何时创建新的$resvs
,如果任何其他$resvs
包含相同的eventKey
(该对象的子节点) )作为已存在的reservations
节点。
以下代码无效,但现在无法提供更好的内容:
"reservations": {
"$resvs": {
".write": "!data.exists() || newData.child('eventKey').val() == root.child('reservations/$resvs/eventKey').val()"
}
}
编辑:
firebase.database().ref('/reservations').push({
name: name,
number: number,
email: email,
start: start,
end: end,
scheduleId: scheduleId,
scheduleName: scheduleName,
eventKey: eventKey,
placeId: placeId
}).then(function(){
$('#calendar').fullCalendar('refetchEvents'); //confirmaton first? TODO
}).catch(function(error){
alert('err');
});
答案 0 :(得分:1)
为了解决这个问题,我重新尝试更改数据库结构。不要将event key
用作字段,而是尝试将预留数据直接存储在event key
下。通过这种方式,您可以在代码中进行一次检查,一次使用安全规则。如果要签入代码,只需在reservations
节点上添加一个侦听器,并在dataSnapshot对象上使用exists()
方法。以同样的方式使用安全规则,因为根据您的实际数据库结构,您无法以您希望的方式使用通配符。
您的数据库新结构应如下所示:
Firebase-root
|
--- reservations
|
--- eventKey1
| |
| --- //event1 details
|
--- eventKey2
|
--- //event2 details
但请记住,这只会在事件键为unique
时才有效。
希望它有所帮助。