【发布时间】:2017-08-03 09:24:40
【问题描述】:
假设我的数据库中有一个messages 节点,其结构如下:
"messages": {
"$messageId": {
"text": "Hello there!",
"created_by": "$userId",
"created_at": 1501749790029
}
}
还有这条规则:
"messages": {
".read": "auth != null",
"$messageId": {
".write": "auth != null",
// required fields
".validate": "newData.hasChildren(['text', 'created_by', 'created_at'])"
}
}
看起来很标准。但我的问题是,这个结构和规则允许任何用户将created_at 的值更改为任何值,对吧? created_at 属性应该是消息推送时间的时间戳,并且不能编辑。
如果我像这样重新构建我的数据库,我是否正确:
"messages": {
"$messageId": {
"text": "Hello there!",
"created_by": "$userId"
}
},
"created_at": {
"$messageId": 1501749790029
}
基本上,我会将created_at 移动到一个单独的节点,因此用户无法对其进行编辑。然后,我将通过 Cloud Functions 设置一个事件触发器,当有新消息推送到 messages 时,它将自动将时间戳推送到 created_at。
【问题讨论】:
标签: firebase firebase-realtime-database