Мне нужно контролировать доступ к отдельным свойствам в пользовательском объекте в каталоге users в firebase rtdb.Мои текущие правила таковы:
{
"rules": {
"users": {
"$uid": {
"name": {
".write": "auth.uid === 'adminID' || $uid === auth.uid",
".read": "auth.uid === 'adminID' || $uid === auth.uid"
},
"plans": {
".write": "auth.uid === 'adminID' || $uid === auth.uid",
".read": "auth.uid === 'adminID' || $uid === auth.uid"
},
"survey": {
".write": "auth.uid === 'adminID' || $uid === auth.uid",
".read": "auth.uid === 'adminID' || $uid === auth.uid"
},
"survey_done": {
".write": "auth.uid === 'adminID' || $uid === auth.uid",
".read": "auth.uid === 'adminID' || $uid === auth.uid"
},
"notes": {
".write": "auth.uid === 'adminID'",
".read": "auth.uid === 'adminID'"
},
"status": {
".write": "auth.uid === 'adminID'",
".read": "auth.uid === 'adminID'"
}
}
},
"sending": {
".write": "auth.uid === 'adminID'",
".read": "auth.uid === 'adminID'"
}
}
}
Администратор должен иметь возможность доступа ко всем данным, но когда я вхожу в него как веб-приложение в своем веб-приложении, я получаю ошибку access_denied.
Кроме того, пользователь (не администратор) должен иметь возможность видеть свои свойства name, plans, survey and survey_done
, но не другие, защищенные администратором.Когда пользователь делает запрос на чтение users/their-user-id
, я получаю ту же ошибку, что и выше.В идеале он просто возвращает все свойства, к которым у пользователя есть доступ, но единственный способ, которым пользователь может получить к ним доступ, - это запрос на чтение по отдельности.
Я использую запрос: firebase.database().ref("users").child(id).once("value")