2017-10-08 42 views
0

任何人都可以提供有關在Firebase規則中使用'newData'的正確方法的指導嗎?我意識到它不能用於'.read'(出於顯而易見的原因),但我也注意到由Google提供的示例總是在驗證規則中使用'newData'。例如,在 'hasChild(childPath)',谷歌的指南表明:正確使用Firebase規則中的'newData'

".validate": "newData.hasChild('name')" 

我還發現這從GitHub。在研究如何將強大的規則放在一起時,我發現這也非常有幫助。我注意到,'newData'主要用於'validate'下,很少用'write'。我用'寫'規則找到的唯一'newData'示例來自第二個鏈接

".write": "!newData.exists()" 

我不知道是否有這個原因。 「寫入」規則中如何使用'newData'有沒有限制?例如,下面的工作總是會起作用嗎?我的實驗表明它沒有,但也許我錯過了一些東西。

".write": "newData.hasChild('name')" 

回答

1

這裏

newData變量是可用的,並且可以有效地與.write.validate規則使用firebaser。如果你的寫規則有一個很好的用例,那就去做吧!

我通常使用.write規則來確保用戶具有寫入該位置的適當權限。該許可通常不取決於新數據,而是純粹依據位置和其他地方的現有數據。

.validate另一方面,規則用於驗證新數據的結構是否符合您的應用程序的要求並且這些值是允許的。所以在這裏更常見的使用newData

+0

謝謝弗蘭克。你的回答排除了一些問題。我一直在困惑這一段時間。您對使用{.write}進行權限是正確的。我一直在尋找一種方法來比較新的數據錄入和允許公開發布的用戶列表。規則看起來像這樣{「.write」:「root.child('public')。child(newData.child('user').val())。exists()」}。任何提示如何排除故障多一點? –

+0

如果您在編寫代碼時遇到問題,請在您的問題中包含用例和[重現您卡住的最小代碼](http://stackoverflow.com/help/mcve)。在這種情況下,應該包含實際JSON的片段(如文本,沒有截圖),您可以通過點擊[Firebase數據庫控制檯](https://console.firebase.google。)中的「導出JSON」鏈接獲得該片段。 COM /項目/ _ /數據庫/數據)。 –

+0

好的。我認爲這個問題仍然有效,儘管我試圖儘可能簡化問題。我發現的例子似乎並沒有將newData用於.write,所以我想知道是否有任何主要的限制。 JSON非常簡單:「public」:{ 「user1」:true}} –