为 Firebase 数据库条目设置 "publishing time"?
Setting a "publishing time" for Firebase database entries?
我正在计划一个允许用户创建 post 的应用程序,在 post 的创建者选择 date/time 之前,其他用户不应读取这些内容.
这可以使用 Firebase 实时数据库吗?我将如何实施这样的事情?
我想简单地在客户端代码中实现它是不安全的,因为经过身份验证的用户仍然可以手动 GET
所有 post,甚至是 "not yet published" ?我可以使用数据库规则来做到这一点,即使每个 post 都会有他们自己的发布 date/time 吗?
我能想到的唯一解决方案是创建一个全新的节点scheduledPosts
,它有自己的规则,只允许创建者在发布日期之前see/edit它(如果那是你想要的)瞄准)。
{
"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"
}
}
}
}
是的,使用 Firebase 是可能的。您需要做的就是为每个 post 添加一个标志,默认布尔值为 false
和一个 TIMESTAMP
。这意味着默认情况下,post 不能被其他用户读取。然后您需要在 TIMESTAMP
字段上使用侦听器来查看当前 date/time 何时等于 post 的创建者选择的 date/time。如果相等,则只需将标志的值设置为 true
。这意味着 post 可以被其他用户读取。就是这样!
您也可以使用如下安全规则来实现此目的:
//Ensure that data being read is less than or equal with the current date/time.
".read": "data.child('timestamp').val() <= now"
您可以使用读取规则,结合now
规则看起来像这样:
".read": "(auth != null) && (data.child('publish_time').val() < now)"
我正在计划一个允许用户创建 post 的应用程序,在 post 的创建者选择 date/time 之前,其他用户不应读取这些内容.
这可以使用 Firebase 实时数据库吗?我将如何实施这样的事情?
我想简单地在客户端代码中实现它是不安全的,因为经过身份验证的用户仍然可以手动 GET
所有 post,甚至是 "not yet published" ?我可以使用数据库规则来做到这一点,即使每个 post 都会有他们自己的发布 date/time 吗?
我能想到的唯一解决方案是创建一个全新的节点scheduledPosts
,它有自己的规则,只允许创建者在发布日期之前see/edit它(如果那是你想要的)瞄准)。
{
"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"
}
}
}
}
是的,使用 Firebase 是可能的。您需要做的就是为每个 post 添加一个标志,默认布尔值为 false
和一个 TIMESTAMP
。这意味着默认情况下,post 不能被其他用户读取。然后您需要在 TIMESTAMP
字段上使用侦听器来查看当前 date/time 何时等于 post 的创建者选择的 date/time。如果相等,则只需将标志的值设置为 true
。这意味着 post 可以被其他用户读取。就是这样!
您也可以使用如下安全规则来实现此目的:
//Ensure that data being read is less than or equal with the current date/time.
".read": "data.child('timestamp').val() <= now"
您可以使用读取规则,结合now
规则看起来像这样:
".read": "(auth != null) && (data.child('publish_time').val() < now)"