让我们以http://up2f.co/15euYdT为例,通过检查只有评论的创建者可以更改评论来保护firebase应用程序。
让我们假设我们需要在另一个结构中保留注释的总数,例如
"stats" :{
"comments":{
"count":2
},
}
我们需要保护此部分免受注册用户的直接访问。我们可以执行类似
的操作"stats" :{
"$adminid":{
"comments":{
"count":2
},
},
}
我们只允许管理员访问那里。
为此,我们需要创建一个与Firebase的持久连接,该连接将监听评论表中的更改并触发事件以更新统计信息表。
这可能吗?如果不是,我们如何保护未分配给特定用户的数据?
答案 0 :(得分:1)
由于您的管理进程将使用秘密令牌登录,因此安全规则将不适用。因此,您可以使用以下方法简单地保护客户端访问:
// not applied to privileged server logging in with token
".write": false,
或者,如果您希望客户端增加金额,您可以使用以下技巧,只允许他们增加计数器,并且只允许他们在计数器更新时添加注释。 (参见工作演示http://jsfiddle.net/katowulf/5ESSp/)
{
"rules": {
".read": true,
".write": false,
"incid": {
"counter": {
// this counter is set using a transaction and can only be incremented by 1
".write": "newData.isNumber() && ((!data.exists() && newData.val() === 1) || newData.val() === data.val()+1)"
},
"records": {
"$id": {
// this rule allows adds but no deletes or updates
// the id must inherently be in the format rec# where # is the current value of incid/counter
// thus, to add a record, you first create a transaction to update the counter, and then use that counter here
// the value must be a string less than 1000 characters
".write": "$id >= 'rec'+root.child('incid/counter').val() && !data.exists() && newData.isString() && newData.val().length <= 1000"
}
}
}
}
}