Firebase Rule可在最近10分钟内读取嵌套节点上的数据

时间:2018-10-20 08:49:31

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

我想实施一个规则,以读取最近5或10分钟的数据。我的数据库是这样的:

this

我想允许用户阅读最近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"
            }

请提供任何帮助或建议。 错误信息 enter image description here

编辑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。还尝试了这些规则,除了读:true。

    ".read": "data.child('messageTime').val() >0"
    ".read": "data.child('messageTime').val() !==null"
    ".read": "data.exists()"
    ".read": "data.hasChild('MessageId')"

这是屏幕截图

enter image description here

1 个答案:

答案 0 :(得分:0)

我刚刚将此值添加到自己的数据库中

"52903949": {
  "messageTime": 1540054472392
}

52903949是您问题的ID,1540054472392Date.now()在我添加问题时返回的值。

然后我添加了以下规则:

{
  "rules": {
    "52903949": {
      ".read": "data.child('messageTime').val() > (now - 600000)"
    }
  }
}

并且能够通过以下结果访问模拟器中的数据:

enter image description here

如果我将600000缩短,则读操作将失败,因为该时间已经到期。


更新了带有嵌套子代的屏幕截图

enter image description here