我看了 Firebase 的官方指南,我的印象是request.resource.data指向正在寫入的新資料。但是,當我在模擬器中進行測驗時,request.resource.data無論我發送什么都存在,并且始終等于resource.data. 我閱讀了檔案,它有點繞。
如果這些值應該相同,我如何解釋指南中的這個片段
allow create: if
request.resource.data.score is number &&
request.resource.data.score >=1 &&
request.resource.data.score <=5 &&
據說這是為了防止用戶為餐廳發送無效的 1-5 星評級。但是,根據我從模擬器中的理解,這會驗證已經存在的資料,而不是傳入的資料。
視頻中的瞬間鏈接:https : //youtu.be/eW5MdE3ZcAw?t=628
uj5u.com熱心網友回復:
在創建/更新/洗掉操作中,request.resource指的是操作后存在的檔案(如果操作成功),而resource指的是操作前存在的檔案。
因此(僅)如果您的寫入操作沒有任何更改,它們是否會完全相同。
從資料驗證的檔案中:
該
resource變數指的是請求的檔案,并且resource.data是存盤在檔案中的所有欄位和值的映射。有關該resource變數的更多資訊,請參閱參考檔案。寫入資料時,您可能希望將傳入資料與現有資料進行比較。在這種情況下,如果您的規則集允許掛起寫入,則該
request.resource變數包含檔案的未來狀態。對于僅修改檔案欄位子集的更新操作,該request.resource變數將包含操作后的待處理檔案狀態。您可以檢查欄位值request.resource以防止不需要或不一致的資料更新:service cloud.firestore { match /databases/{database}/documents { // Make sure all cities have a positive population and // the name is not changed match /cities/{city} { allow update: if request.resource.data.population > 0 && request.resource.data.name == resource.data.name; } } }
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/322667.html
