考虑这种称为ChatMessage的Bolt类型
路径
path /chats/{cid}/{mid} is ChatMessage {
read() { auth.uid != null }
write() { this.uid == auth.uid }
}
类型
type ChatMessage {
uid: String,
message: String,
date_created: Number,
date_modified: Number,
validate() { this.message != null && this.date_modified != null }
}
已编译规则
{
"rules": {
"chats": {
"$cid": {
"$mid": {
".validate": "((newData.hasChildren(['uid', 'message', 'date_created', 'date_modified']) && newData.child('message').val() != null) && newData.child('date_modified').val() != null)",
"uid": {
".validate": "newData.isString()"
},
"message": {
".validate": "newData.isString()"
},
"date_created": {
".validate": "newData.isNumber()"
},
"date_modified": {
".validate": "newData.isNumber()"
},
"$other": {
".validate": "false"
},
".read": "auth.uid != null",
".write": "newData.child('uid').val() == auth.uid"
}
}
}
}
}
我发现的是这个
newData.hasChildren(['uid', 'message', 'date_created', 'date_modified'])
仅适用于创建操作,并且允许使用部分数据进行更新操作。很好!
但是,这
newData.child('message').val() != null) &&
newData.child('date_modified').val() != null
不阻止仅包含message
或date_modified
的更新
目标是做到这一点,以便用户仅在提供message
和date_modified.
的情况下才能更新其聊天记录
是否有一种方法可以在不更新消息时不使用Cloud Functions更新聊天的情况下实现这一目标?