0

我有一個包含一些對象的數組。用戶應該能夠通過moduls/調用所有對象,並通過moduls/$id調用所有對象。但是當沒有模塊時,數據庫應該返回一個錯誤,所以客戶端知道什麼都沒有。當在firebase數據庫中找不到條目時返回錯誤

沒有返回錯誤時,MODUL不存在:

"moduls": { 
    ".read": "true", 
    "$modul": { 

    } 
} 

返回錯誤時數據不存在,但是給了錯誤,當我想所有moduls:

"moduls": { 
    "$modul": { 
     ".read": "data.exists()", 
    } 
} 

那麼,有辦法解決這兩種情況,還是更好地檢查與客戶是否設置了特定的值:

if(typeof modul.name === "undefined") { 
    //modul not found 
} 

回答

0

您似乎想要使用安全規則來引導客戶端邏輯。這可能會帶來更多問題,而不是價值。相反:使用客戶端代碼來引導客戶端邏輯和安全規則,以確保您的業務規則不被違反。

如果您可以將您的業務邏輯改爲適合這些規則的事情,那麼您將有更容易的時間。例如,「任何用戶都可以創建一個對象,但它一旦建立,沒有人可以將其覆蓋」,變成了:

"moduls": { 
    "$modulId": { 
    ".write": "!data.exists() && newData.exists()", 
    } 
} 

和客戶端:

function createModul(modulId) { 
    var modulRef = ref.child('moduls').child(modulId); 
    modulRef.once('value', function(snapshot) { 
    if (snapshot.exists()) { 
     console.error('Modul with '+modulId+' already exists); 
    } 
    else { 
     modulRef.set('My new value', function(error) { 
     if (error) { 
      console.error('Write failed, probably somebody created '+modulId+' in the meantime') 
     } 
     }); 
    } 
    } 
} 

現在客戶端檢查自己業務邏輯和服務器確保它不被違反。

相關問題