2016-02-16 44 views
3

我通過the docs閱讀,我不確定寫規則和驗證規則部分之間的區別。這段代碼是多餘的嗎?任何一點使用一個或另一個,或兩者?這個firebase規則是多餘的嗎?什麼時候使用寫vs驗證?

具體做法是:「用戶必須先登錄,並寫入值必須是UID

    • 「驗證」說寫’許可說,你可以只寫$ USER_ID部分如果值匹配你的uid。
    { 
        "rules": { 
        "users": { 
         ".validate": "auth != null && newData.val() === auth.uid", 
         "$user_id": { 
         ".write": "$user_id === auth.uid" 
         } 
        } 
        } 
    } 
    
  • +0

    我也與他們混淆。 –

    +1

    我找到了一個很好的解釋。看到這個,https://www.firebase.com/docs/security/api/rule/validate.html –

    回答

    4

    唯一不同的是,.validate不會傳播到其子。

    回答你的問題,在你的例子中,你可以使用「.write」。

    ".write": "auth != null && $user_id === auth.uid"

    +0

    次要的事情,但請注意,只有.write規則授予訪問權限才評估.validate。不過,我猜想這並沒有太大區別。 –

    0

    技術上可能沒有(除了傳播)任何區別,但在我看來是有區別的。

    例如安全性是.write的主要關注點,而數據完整性是.validate的主要關注點。

    例如:

    考慮,我們寫信給/books/{bookKey}/name路徑。

    1. 用戶被允許寫入此路徑是.write的關注。像用戶登錄一樣的檢查可以在這裏執行。
    2. 用戶是否正在輸入書的正確名稱?是.validate的關注。例如,名稱應該超過3個字符長,必須以字符開始...

    P.S. 同時考慮this問題與多行,最好有兩個單獨的方法更多的可讀性。

    相關問題