我正在计划一个应用程序,允许用户创建其他用户无法读取的帖子,直到帖子的创建者选择的日期/时间为止。
使用Firebase实时数据库是否可以实现?我该如何实现这样的东西?
我想只是在客户端代码中实现它并不安全,因为经过身份验证的用户仍然可以手动GET
所有帖子,甚至是“尚未发布”的帖子?我可以使用数据库规则来执行此操作,即使每个帖子都有自己的发布日期/时间吗?
答案 0 :(得分:2)
是的,Firebase可以实现。您需要做的就是为每个帖子添加一个标志,其默认布尔值为false
和TIMESTAMP
。这意味着默认情况下,其他用户无法读取帖子。然后,您需要在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)