2017-01-25 88 views
0

我對數據庫有以下結構和規則,我的目標是禁止用戶通過child()函數獲取子項的名稱,即使沒有註冊。我的意思是每個知道孩子名字的人都可以寫,但我的問題是每個人都可以通過孩子功能看到孩子的名字。Firebase:根據安全規則阻止子項功能

規則:

{ 
    "rules": { 
    ".read": true, 
    ".write": true 
    } 
} 

結構:

{ 
    "collaborate" : { 
    "xwkmM76Irf" : { 
     "css" : "", 
     "html" : "", 
     "js" : "" 
    } 
    } 
} 

禁止:

firebase.database().ref('collaborate').once(
    'value', 
    function($snapshot){ 
     ... 
    } 
); 

允許:

firebase.database().ref('collaborate/'+$id).once(
    'value', 
    function($snapshot){ 
     ... 
    } 
); 
firebase.database().ref('collaborate/'+$id).set({ 
... 
}); 

感謝

+2

不是顯示您的JSON結構的描述,而是顯示實際JSON的代表片段(作爲文本,沒有截圖)。您可以通過點擊Firebase數據庫控制檯中的導出JSON鏈接來獲取此信息。 –

+0

@FrankvanPuffelen它不會幫助你它的安全規則... – howtoweb

+0

現在,你分享了JSON,你可以給你一個你想要允許的操作和一個你想要禁止的操作? (我想在這裏找到[MCVE](http://stackoverflow.com/help/mcve),因爲我不清楚你的目標或問題是什麼) –

回答

2

您可以允許使用$變量讀取子節點:

{ 
    "rules": { 
    "collaborate": { 
     "$collaborateId": { 
     ".read": true, 
     ".write": true 
     } 
    } 
    } 
} 

規則與$開始都適用於該位置的每個子節點。

因此,通過上述規則,您可以讀取任何現有的子節點(但不能通過在/collaborate上偵聽獲取子節點的列表)。您可以編寫新的子節點(或覆蓋現有的節點,一次一個)。