我已阅读In firebase, can I set permissions to allow only PUSH operations to a given object?并且到目前为止已将其复制,但它不起作用。
我有一个匿名使用的网站,我收集评论的地方。我想存储要添加的新内容,但是要阻止编辑和删除现有数据。
Angular 2,AngularFire2
export class FirebaseService {
comments: FirebaseListObservable<Object>;
locations: FirebaseListObservable<Object>;
constructor(private af: AngularFire) {
this.comments = this.af.database.list(environment.stem + '/comments');
}
addComment(comment) {
return this.comments.push(comment)
.catch(err => console.error(err));
}
}
我预计这个规则会这样做,因为在我推送的情况下不存在现有数据吗?
{
"rules": {
".read": true,
".write": "!data.exists()"
}
}
将写入规则设置为true
会使其工作,但比我想要的更宽松。
以下是此数据库路径中现有json的开头(这里的密钥来自我正在迁移的服务)
{
"0763a8d3e2407697" : {
"comment" : "Thanks for your comments and feedback, Simon",
"date" : "Sat Jan 03 2015 08:46:17 GMT+0100 (CET)"
},...
答案 0 :(得分:1)
使用当前规则,只要数据库中存在任何数据,数据库服务器就会拒绝写入。
但是你的用例似乎只想拒绝覆盖特定现有注释的write。对于该用例,您应该将.write
规则放在树中:
{
"rules": {
".read": true,
"$stemid": {
"comments": {
"$commentid": {
".write": "!data.exists() && newData.exists()"
}
}
}
}
}
这些规则use $ variables
确保它们适用于所有词干和所有评论。