2016-07-30 152 views
0

我正在試驗Firebase並對security rules感到好奇。firebase - 安全規則REST

比方說,你必須表現爲簡單的火力點數據集:

{ 
"myNewData" : "Some String" 
} 

你怎麼能寫一個規則,使只有被寫入的對象具有鍵名myNewData

我使用POST方法和數據在火力地堡結構如下:

-myFireBaseapp 
    -someData 
     -RandomFirebaseKey 
      -myNewData 
     -RandomFirebaseKey 
      -myNewData 
在我想出了

{ 
    "rules": { 
     ".read":true, 
     "$someData":{ 
     ".write":true,   
     ".validate": "newData.hasChild('myNewData')" 
     } 

    } 
    } 

這在模擬器但不是在工作模擬器

郵差。

POST

http://myfirebase.app.bucket/someData.json

{ 
    "myNewData" : "Some String" 
    } 

感謝任何信息。

+0

顯示導致REST調用失敗的最小代碼。 –

+0

@FrankvanPuffelen REST致電郵差。在 – gregdevs

+0

之上添加了post調用該請求沒有發送任何數據,因此不會滿足安全規則。如果沒有[你想要做的最簡單,完整的例子](http://stackoverflow.com/help/mcve),很難提供幫助。例如,在這種情況下,您的數據結構的兩個樣本根據myNewData是否爲值的關鍵而不同。我會寫一個我希望有幫助的答案。 –

回答

1

如果你希望自己的數據總是有一個關鍵/someData/<anyKey>/myNewData任意值,你可以驗證與

{ 
    "rules": { 
     ".read":true, 
     "someData":{ 
      "$anyKey": { 
       ".write":true,   
       ".validate": "newData.hasChild('myNewData')" 
      } 
     } 
    } 
} 

如果斜視你的眼睛,你仍然可以看到這些規則/someData/$anyKey/myNewData的路徑。

如果你也想驗證的myNewData的值是一個字符串,你會展開規則:

{ 
    "rules": { 
     ".read":true, 
     "someData":{ 
      "$anyKey": { 
       ".write":true,   
       ".validate": "newData.hasChild('myNewData')", 
       "myNewData": { 
        ".validate": "data.isString()" 
       }, 
       "$other": { 
        ".validate": false 
       } 
      } 
     } 
    } 
} 

我還添加了"$other: { ".validate": false }到最後樣本,從而確保與任何寫非指定鍵是拒絕。所以現在/someData/$anyKey可以只有包含一個myNewData屬性是一個字符串。

這一切都涵蓋在Using $ Variables to Capture Path Segments的Firebase文檔中,我強烈建議您學習。

+0

太棒了。非常感謝這個例子。在幾個小時內給出這個鏡頭並向你報告。 – gregdevs

+0

我簡要介紹了他們的文檔,但沒有捕捉變量的功能。謝謝 – gregdevs

+0

再次感謝。這讓我走上了正軌。 – gregdevs