我想確保我的firebase數據庫允許創建新記錄,但不允許刪除現有記錄。最終,我計劃在我的應用中使用Firebase身份驗證,並允許用戶更新現有記錄(如果他們是作者),但我試圖首先讓這個簡單案例工作。Firebase數據庫規則 - `data.exists()`似乎總是如此,可能的錯誤?
但是!不管我在數據庫規則模擬器中嘗試什麼,儘管文檔seems to suggest,data.exists()
的值似乎總是如此。從我從the documentation中可以理解的內容可知,變量data
代表數據庫中的記錄,與操作發生之前一樣。也就是說,對於創建,data
不存在,並且對於更新/刪除,data
將引用存在於數據庫中的真實記錄。 這似乎並沒有這樣的情況,到了那裏我居然懷疑一個bug在火力地堡,因爲在我的數據庫中設置以下規則當點,所有的寫操作是不允許的:
{
"rules": {
".read": true,
".write": "!data.exists()"
}
}
無無論我將什麼值放入模擬器,無論是位置還是數據。我甚至寫了一個小的EmberJS應用程序來驗證模擬器是否說出了真相,並且它也被拒絕了所有寫入操作的許可。
我真的不知道該從哪裏出發,因爲我幾乎無法嘗試。我嘗試刪除數據庫中的所有記錄,這可以讓模擬器認爲它可以執行寫入操作,但是我的測試應用程序仍然獲得PERMISSION_DENIED,所以我不知道是什麼導致了這裏的不一致。
是我對預定義的data
變量的理解是否正確?如果是這樣,爲什麼我不能寫出我想要的規則?我看到snippets字面上試圖達到我的「創造唯一,不刪除」規則,似乎與我的理解相符。
最後說明:我正在嘗試在一個全新的Firebase項目中使用上面的規則,並且只有〜少數記錄我的數據庫周圍的垃圾數據。
嗨,感謝您的回覆。這是我理解中的缺失部分,我顯然沒有正確解析文檔。我實現了像這樣的變化,現在一切都按預期工作100%。我假定「數據」是一種神奇解決的變量,它是根據您的要求推斷的,而不是基於規則本身。謝謝! – Peabnuts123