【问题标题】:Setting a "publishing time" for Firebase database entries?为 Firebase 数据库条目设置“发布时间”?
【发布时间】:2017-10-30 10:28:48
【问题描述】:

我正在计划一个应用程序,它允许用户创建在帖子创建者选择的日期/时间之前其他用户不应该阅读的帖子。

这可以使用 Firebase 实时数据库吗?我将如何实现这样的事情?

我想简单地在客户端代码中实现它并不安全,因为经过身份验证的用户仍然可以手动 GET 所有帖子,即使是“尚未发布”的帖子?即使每个帖子都有各自的发布日期/时间,我是否可以使用数据库规则来做到这一点?

【问题讨论】:

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


    【解决方案1】:

    是的,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"
    

    【讨论】:

    • 我还没有阅读 Firebase 规则,但我认为我会使用布尔标志作为某些规则的基础,对吧?而监听器运行在客户端网页代码中?
    【解决方案2】:

    我能想到的唯一解决方案是创建一个全新的节点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"
          }
        }
      }
    }
    

    【讨论】:

      【解决方案3】:

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

      规则如下所示:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-12
        • 1970-01-01
        • 2017-07-18
        • 2019-01-18
        • 1970-01-01
        相关资源
        最近更新 更多