为Firebase数据库条目设置“发布时间”?

时间:2017-10-30 10:28:48

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

我正在计划一个应用程序,允许用户创建其他用户无法读取的帖子,直到帖子的创建者选择的日期/时间为止。

使用Firebase实时数据库是否可以实现?我该如何实现这样的东西?

我想只是在客户端代码中实现它并不安全,因为经过身份验证的用户仍然可以手动GET所有帖子,甚至是“尚未发布”的帖子?我可以使用数据库规则来执行此操作,即使每个帖子都有自己的发布日期/时间吗?

3 个答案:

答案 0 :(得分:2)

是的,Firebase可以实现。您需要做的就是为每个帖子添加一个标志,其默认布尔值为falseTIMESTAMP。这意味着默认情况下,其他用户无法读取帖子。然后,您需要在TIMESTAMP字段上使用侦听器,以查看当前日期/时间何时与帖子的创建者选择的日期/时间相等。如果它相等,那么只需将标志的值设置为true。这意味着该帖子可以被其他用户读取。就是这样!

您也可以使用以下安全规则来实现此目的:

//Ensure that data being read is less than or equal with the current date/time.
".read": "data.child('timestamp').val() <= now"

答案 1 :(得分:1)

我能想到的唯一解决方案是使用它自己的规则创建一个全新的节点scheduledPosts,只允许创建者在发布日期之前查看/编辑它(如果有的话)你的目标是什么。

{
  "users": {
     "uid_1": {
        "someData": "data",
        ...
     }
  },
  "scheduledPosts": {
    "pid_1": {
       "postData": "data",
       "uid": "uid_1",
       "publishDate": 1695840299,    // must be in milliseconds since epoch
       ...
    }
  }
}

您的scheduledPosts规则如下:

{
  "rules": {
    "scheduledPosts": {
      "$post_id": {
        ".read": "root.child('scheduledPosts').child($post_id).child("publishDate").val() < now || root.child('scheduledPosts').child($post_id).child("uid") === auth.uid",
        ".write": "root.child('scheduledPosts').child($post_id).child("publishDate").val() < now || root.child('scheduledPosts').child($post_id).child("uid") === auth.uid"
      }
    }
  }
}

答案 2 :(得分:1)

您可以使用读取规则,并结合使用now

规则看起来像这样:

".read": "(auth != null) && (data.child('publish_time').val() < now)"