您正在比較auth.uid
與路徑/writings/user-id
的值,該路徑缺少密鑰xxx-key-xxx
,所以這將始終爲假,因爲此路徑上的數據不存在。您可以更改您的規則以獲得孩子的密碼,但是,這會限制您的.read
許可權來閱讀個人writings
兒童,例如
{
"writings": {
"$wid": {
".read": "auth !== null && root.child('writings/$wid/user-id').val() === auth.uid"
或等價
".read": "auth !== null && data.child('user-id').val() === auth.uid"
}
}
}
利用這些規則,你會看到Permission Denied
試圖讀取/writings
時 - 你必須逐個讀取文件,所以你必須知道每個文檔的關鍵。現在我們知道我們需要的是每個文檔的關鍵字,我們需要找到一種檢索它們的方法。
表示這樣的關係的一種常見方式是通過扇出數據。我們有用戶的uid
,我們需要他們擁有的文檔的密鑰。如果您要維護另一個存儲每個用戶文檔的密鑰的根節點,那麼您可以引用該位置來檢索用戶的文檔。
{
"user-writings": {
"$uid": {
".read": "auth.uid === $uid",
"$wid": {
".write": "auth.uid === $uid"
}
}
},
"users": {
...
},
"writings": {
"$wid": {
".read": "auth.uid === data.child('user-id').val()",
".write": "auth.uid === newData.child('user-id').val()"
}
}
}
這些規則確保用戶只能憑藉只具有user-writings/$uid
訪問自己的文檔的按鍵查看自己的文件。當用戶創建書寫時,他們還需要寫入user-writings/$uid/$wid
將值設置爲true
。
現在要檢索屬於用戶的文檔,您需要用用戶的uid查詢位置user-writings/$uid
以檢索密鑰,然後必須獲取用戶擁有的每個writings/$wid
的數據。它可能適合您將writings
完全丟棄並將每個用戶的文檔存儲在數據庫中相應的位置(user-writings/$uid
)。
什麼不行?你能否顯示你不想工作的代碼?反之亦然:無法閱讀的代碼,您想要的代碼? –
我在Firebase控制檯中模擬並且被拒絕。我將存儲有'uid'的數據設置爲模擬器中使用的UID,但無法讀取。 –
模擬的路徑是'/ writings /'。我想獲取用戶擁有的所有文字。 –