2016-04-06 46 views
0

這裏是我的數據結構:火力地堡安全 - 如何停止覆蓋

{ 
    "items" : { 
     "item0" : { 
     "uniqueID" : 5, 
     "uniqueID" : 31, 
     "uniqueID" : 88 
     }, 
     "item1" : { 
     "uniqueID" : 22, 
     "uniqueID" : 3 
     } 
    } 
} 

我想爲用戶能夠:

1 - 創建一個新的項目

2創建一個新的uniqueID(項目中的條目)

我想停止用戶:

3,刪除任何

4創造比上述

這裏是我的不正確的嘗試中提到的其他任何東西:

{ 
    "rules": { 
     ".read": true, 
     ".write": false, 
     "items": { 
      ".write": "!data.exists()" 
     } 
    } 
} 

我相信".write": false應該完成的任務3和4,和".write": "!data.exists()"應做到任務1和2,但此解決方案停止將任何數據寫入分區

寫入操作應該失敗:

var killItem0 = {}; 
killItem0['item0'] = 'all item 0 entries are now replaced by this text'; 
REF.child('items/').update(killItem0); //this replaces all data held by item0 
+0

你能證明獲得成功的寫操作,但應避免? –

+0

已更新!,請看原始問題 – David

+1

您當前的寫入規則適用於整個項目節點,因此如果有任何數據已經存在,您現在就無法執行任何操作。你想要的是更深入,並有唯一的ID的規則。 –

回答

2

我覺得這樣的事情應該工作:

{ 
"rules": { 
    ".read": true, 
    "items": { 
     "$itemID": { 
      "$uniqueID": { 
      //check if data is already there and new data in a number (going off your example data for the number part) 
      ".write": "!data.exists() && newData.isNumber()" 
      } 
     } 
    } 
} 
} 
+0

我認爲你現在可能有太多的水平。這只是'/ items/$ itemid'不是嗎? –

+0

嘿,很好的答案!我發現它幾乎是正確的,我需要添加「.write」:「!data.exists()」作爲「$ itemID」中的第二個條目,以允許添加新的item#。 – David