1.作者不可编辑但可删除
".write": "!data.exists() || (!newData.exists() && data.child('author') === auth.id)"
2. 点赞/点赞
在客户端上,使用允许您安全地增加值的事务:
ref.transaction(function(currentValue) {
return (currentValue||0)+1;
}, function(error) {
if( error ) /* failed too many times */
else /* it worked */
});
安全性也很简单:
".validate": "newData.isNumber() && newData.val() === data.val()+1"
2.5 确保唯一投票
我不确定这意味着什么;记录不能被编辑,如果可以的话,只有作者才能这样做;所以我不太理解这种情况下的“修改”:“如果用户之前没有修改过这个?那将如何工作?”
为确保投票是唯一的,您只需按用户 ID 存储它们。用户可以通过删除记录来删除他们的投票。
我建议将它们存储在与 spark 不同的路径中,并且仍然保持简单的增量(被投票赞成/反对的消息),因为您不希望每次获取投票者时都必须检索整个投票者列表火花。
安全规则如下所示:
"votes": {
"$spark_id": {
"$vote": {
".read": "$vote === auth.id",
".write": "$vote === auth.id",
// to allow downvoting in addition to up or delete, just add -1 here
".validate": "newData.val() === 1 || newData.val() === null"
}
}
}
现在为增量的验证规则添加一个检查:
".validate": "!root.child('votes').child($spark_id).child(auth.id).exists() && newData.isNumber() && newData.val() === data.val()+1"