【发布时间】:2018-10-20 08:49:31
【问题描述】:
我想实施一个规则来读取最后 5 或 10 分钟的数据。我的数据库是这样的:
。
我想允许用户阅读过去 10 分钟的消息,但该规则不起作用,我无法使其起作用我尝试了不同的规则,例如这样。
"Messages": {
"$messagekey": {
"$key": {
".read":"root.child('Users/Messages/'+$messagekey+'/'+$key+'/messageTime').val()> (now - 600000000)", }
},
".write":"auth!=null"
}
还有这个
"Messages": {
"$messagekey": {
"$key": {
".read": "data.child('messageTime').val() > (now - 600000)"
}
},
".write": "auth!=null"
}
编辑 2 使用这条规则我仍然无法使其工作
{
"rules": {
"Messages": {
"$messagekey": {
"$key": {
".read": "data.child('messageTime').val() > (now - 90000000)"
}
},
".write": "auth!=null"
}
}
}
这是我的数据
Users
Messages
WZTDdZslJrMFqgDLNWo4jXehsF02_nUVrJthSqHXH8Ur0stRz2tihxdg1
-LPFPTBx7BA6urp-CSbZ
messageText: "Hello"
messageTime: 1540059028779
messageUser: "Joker's Grin"
messageUserId: "WZTDdZslJrMFqgDLNWo4jXehsF02"
-LPFPUB5efDAIVu_AxP0
messageText: "how are you"
messageTime: 1540059028779
messageUser: "Crazy Eights"
messageUserId:"nUVrJthSqHXH8Ur0stRz2tihxdg1"
我使用两个通配符“messagekey”和“key”来访问messageId。也尝试了这些规则,除了 read: true。
".read": "data.child('messageTime').val() >0"
".read": "data.child('messageTime').val() !==null"
".read": "data.exists()"
".read": "data.hasChild('MessageId')"
这里是截图
【问题讨论】:
-
第二个 sn-p 乍一看还不错。你对它运行了什么读取操作,你得到了什么错误?
-
@FrankvanPuffelen 这是第二个 sn-p 模拟结果的错误消息类型读取位置用户/消息/abc123xyz/xyzabc123 数据 null Auth null 读取拒绝第 22 行(/Users/Messages/abc123xyz/xyzabc123)阅读:“data.child('messageTime').val() > (现在 - 600000)”
-
我无法重现该问题。我在下面发布了一个答案以显示我做了什么。在您发布的屏幕截图中(请始终将文本内容作为实际文本发布),看起来您的
messageTime比我使用的值短一位。 -
@FrankvanPuffelen 仍然无法使用两级通配符使其工作。唯一有效的规则是 read:true。请检查编辑。
-
对我来说,它同样适用于嵌套的孩子。请参阅更新的屏幕截图。不幸的是,我看不出你的有什么不同。
标签: firebase firebase-realtime-database firebase-security