0

我已閱讀In firebase, can I set permissions to allow only PUSH operations to a given object?並迄今爲止已將其複製,但它不起作用。Firebase:防止所有但.push到列表

我有一個匿名使用的網站,以及我收集評論的地方。我想存儲要添加的新文件,但要防止編輯和刪除現有數據。

角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

您可以添加要允許的操作的代碼*和*您想要拒絕的操作的代碼?還請在該位置添加現有的JSON(如文本,請勿截圖)。 –

+0

@FrankvanPuffelen查看更新的問題 –

回答

1

根據您目前的規則,數據庫服務器將拒絕只要在數據庫中存在任何數據。

但是,您的用例似乎只想拒絕覆蓋特定現有評論的寫入。對於使用情況,你應該把.write規則下到樹:

{ 
    "rules": { 
    ".read": true, 
    "$stemid": { 
     "comments": { 
     "$commentid": { 
      ".write": "!data.exists() && newData.exists()" 
     } 
     } 
    } 
    } 
} 

這些規則use $ variables,以確保它們適用於所有的莖和所有的意見。