我是Firebase的新手,我正試圖理解使用經過身份驗證的用戶標識來保護數據的規則。我在客戶端上使用Angularfire2。我正在使用電子郵件/密碼認證,這工作正常。如何設置firebase數據庫規則來保護每個用戶的數據?
如果我把我的數據庫規則,允許讀取和寫入認證用戶,一切工作正常,我結束了在火力地堡數據庫中的以下數據...
{
"notes" : {
"-KmgjG9hxoXOTtuLTItz" : {
"content" : "test",
"title" : "Test note 1",
"uid" : "iLH4Kg20shViwJebCmU8Ynp0OG23"
},
{
"-Kmh5igvItrJstbAhRpq" : {
"content" : "test",
"title" : "Test note2",
"uid" : "iLH4Kg20shViwJebCmU8Ynp0OG23"
}
}
}
現在我想限制讀取和寫入其中認證用戶的每個對象上設置的用戶ID(UID)匹配的權限,所以我改變了規則如下......
{
"rules": {
"notes": {
".read": "data.child('uid').val() == auth.uid",
".write": "newData.child('uid').val() == auth.uid"
}
}
}
但是,這是行不通的。讀取失敗...
ERROR Error: permission_denied at /notes: Client doesn't have permission to access the desired data.
...和寫入失敗...
FIREBASE WARNING: set at /notes/-KmgjG9hxoXOTtuLTIpG failed: permission_denied
我知道用戶進行身份驗證,因爲如果我硬編碼像規則的用戶ID下面,它工作得很好......
{
"rules": {
"notes": {
".read": "auth.uid == 'iLH4Kg20shViwJebCmU8Ynp0OG23'",
".write": "auth.uid == 'iLH4Kg20shViwJebCmU8Ynp0OG23'"
}
}
}
通過您的安全規則,每個用戶都可以訪問他們擁有的每個便條。但是沒有用戶可以獲得筆記列表。這是按照設計工作的,在Firebase條款中稱爲「規則不是裝修者」。我建議閱讀[在Firebase文檔](https://firebase.google.com/docs/database/security/securing-data#rules_are_not_filters)以及其中一個[關於它的許多問題](https:// www.google.com/search?q=site:stackoverflow.com+firebase+rule+are+not+filters),包括[this original one](https://stackoverflow.com/questions/14296625/)。 –