问题是关于下面展开的船舶分支。无处不在,只有经过认证的用户才可以在任何地方编写他们的数据。但是,有一个例外。 任何经过认证的用户可能会读取数据的船舶分支。Firebase规则只允许任何已通过身份验证的用户删除旧数据
到目前为止,我没有任何麻烦,但这里是一个特殊的规则:
任何身份验证的用户可以删除任何UID以下的儿童在船舶分公司提供的时间戳为10秒或以上。
我希望任何用户能够拨打:
firebase.database().ref('/ships/gp3tJa3tgThukt39EejqJpZq12L2/granit').remove();
uid: gp3tJa3tgThukt39EejqJpZq12L2
shipid: granit
而被授予的权利只删除。
为了检查记录的年龄我存储perf
阵列中的firebase.database.ServerValue.TIMESTAMP
索引0
(我在这里使用一个数组,因为该记录是经常更新,我想数据保持在最低限度)。
在客户端,程序可以看到记录何时可能已过期,然后才会调用remove。这是为了避免无用的失败调用。
我需要一些帮助来定义正确的规则。在我试图定义这个规则的第二个例子中突出显示了这条线。
{
"ships": {
"EnBawzb0CjZVgAKrMZD4HE3k5rW2": {
"oasisoftheseas": {
"param": {
"scale": 0.33075936163570846,
"type": "cruise/royalcaribbean/oasisoftheseas"
},
"perf": {
"0": 1,
"1": 1.11014724E7,
"2": 1.70473256E7,
"3": 115.7,
"timeStamp": 1475144447302
}
}
},
"gp3tJa3tgThukt39EejqJpZq12L2": {
"granit": {
"param": {
"scale": 0.12235531736978282,
"type": "riverbarge/granit"
},
"perf": {
"0": 5,
"1": 2.05622392E7,
"2": 13154087,
"3": 285.9,
"timeStamp": 1475144450086
}
}
}
}
}
下面的规则。这是$ shipid的写规则,我有兴趣正确定义。
{
"rules": {
"anchors": {
"$uid":{
".read": "auth.uid === $uid",
".write": "auth.uid === $uid"
}
},
"completed": {
"$uid":{
".read": "auth.uid === $uid",
".write": "auth.uid == $uid"
}
},
"ships": {
".read": "auth !== null",
"$uid":{
".write": "auth.uid === $uid",
"$shipid":{
".write": "((auth !== null) &&
(now - data.child('perf').child('timeStamp').val() >= 10000))"
}
}
},
"shipslog": {
"$uid":{
".read": "auth.uid === $uid",
".write": "auth.uid === $uid"
}
}
}
}
你已经在你的问题中包含了JSON树的图片。请用实际的JSON替换为文本,您可以通过点击Firebase数据库控制台中的导出按钮轻松获取。将JSON作为文本可以搜索,使我们能够轻松使用它来测试您的实际数据,并将其用于我们的答案中,并且通常只是一件好事。规则相同。 –
嗨,弗兰克。我用JSON数据替换了图像。我更新了规则,我想我现在已经开始工作了。不过,我真的很感激你的反馈。我想,因为没有中间层,这种事情总是在发生。顺便说一句,我绝对喜欢firebase。刚开始使用它,并花费大部分时间学习。 –
嘿保罗。我将你的规则复制到一个测试数据库中,模拟器允许删除操作(我通过在'/ ships/gp3tJa3tgThukt39EejqJpZq12L2/granit'中写'null'来模拟)。这不是你想要的吗? –