2016-10-05 92 views
-1

我正在嘗試首次設置Firebase規則。我想要做的是限制登錄用戶的訪問權限,以便他們只能訪問他們的數據。他們自己的數據是usersusercontacts。任何人都可以寫信給contactmessages路線,任何人都無法閱讀。確保Firebase數據安全

這套規則是否符合我的期望呢?我在模擬器中試過,得到了一個simulated write denied錯誤。我可能在模擬器上做錯了什麼。

{ 
    "rules": { 
    "users": { 
     "$user_id": { 
     // grants read/write access to the owner of this user account 
     // whose uid must exactly match the key ($user_id) 
     ".write": "$user_id === auth.uid", 
     ".read": "$user_id === auth.uid" 
     } 
    }, 
    "usercontacts":{ 
     "$user_id": { 
       ".write": "$user_id === auth.uid", 
       ".read": "$user_id === auth.uid" 
     } 
    }, 
    "contactmessages": { 
     ".read" : false, 
     ".write" : "$user_id === auth.uid" 
    } 
    } 
} 
+0

您可以編輯您的問題包含您嘗試失敗的寫入操作?因此,您寫入的完整路徑,活動uid(如果有),您正在寫入的數據以及現有數據(與寫入規則相關)。 –

回答

0

的這裏的問題是你最後一次寫入規則:

"contactmessages": { 
    ".read" : false, 
    ".write" : "$user_id === auth.uid" 
} 

您正在使用$ user_ID的,但沒有任何$ user_ID的引用到。相反,如果你希望其他人能夠寫在這裏,你應該使用這樣的規則:

".write" : true 

或本條的規定,如果你想每一個身份驗證的用戶才能夠寫:

".write" : "auth != null" 
0

試試這個

{ 
    "rules": { 
    "users": { 
     "$userId":{ 
      ".read": "(auth != null) && ($userId === auth.uid)", 
      ".write": "(auth != null) && ($userId === auth.uid)" 
     } 
    }, 
    "usercontacts": { 
     "$userId": { 
       ".read": "(auth != null) && ($userId === auth.uid)", 
       ".write": "(auth != null) && ($userId === auth.uid)" 
     } 
     }, 
     "contactmessages": { 
     "$userId": { 
       ".read": "(auth != null) && ($userId === auth.uid)", 
       ".write": "(auth != null) && ($userId === auth.uid)" 
     } 
     } 
    } 
}