#firebase #firebase-realtime-database
#firebase #firebase-realtime-database
Вопрос:
У меня есть база данных firebase в реальном времени, структурированная следующим образом:
{
"USERS": {
"user-1": { ... },
"user-2": { ... }
}
"GROUPS": {
"group-1": {
"id": "group-1",
"AUTH": {
"user-1": true,
}
},
"group-2": {
"id": "group-2",
"AUTH": {
"user-2": true
}
},
"group-3": {
"id": "group-3",
"AUTH": {
"user-1": true,
"user-2": true
}
}
}
}
Я знаю, что могу предоставить разрешения на чтение, которые предоставили бы доступ на чтение пользователям, которые принадлежат только к определенной группе, вот так:
{
"rules": {
"GROUPS": {
"$groupId": {
".write": false,
".read": "auth != null amp;amp; data.child('AUTH').child(auth.uid).exists()"
}
}
}
}
Я пытаюсь найти комбинацию запрос правила, которая вернет мне все группы, к которым принадлежит вошедший в систему пользователь.
Например: запрос и изменение правила firebase, которое для вошедшего в систему пользователя-1 возвращает снимок:
{
"group-1": {
"id": "group-1",
"AUTH": {
"user-1": true,
}
},
"group-3": {
"id": "group-3",
"AUTH": {
"user-1": true,
"user-2": true
}
}
}
или
[
{
"id": "group-1",
"AUTH": {
"user-1": true,
}
},
{
"id": "group-3",
"AUTH": {
"user-1": true,
"user-2": true
}
}
]
запрос ссылки «ГРУППЫ» теперь выдает ошибку «отказано в разрешениях».
добавление ‘.read=true’ к ГРУППАМ:
{
"rules": {
"GROUPS": {
".read": true,
"$groupId": {
".write": false,
".read": "auth != null amp;amp; data.child('AUTH').child(auth.uid).exists()"
}
}
}
}
или любая комбинация для ‘.read’, которая выполняет условие, предоставляет каждому доступ ко всем данным.
Есть ли способ (в текущей структуре) запросить базу данных и получить из ветки «ГРУППЫ» все группы, к которым я принадлежу, добавив некоторые ограничения к правилам? или мне нужно поддерживать для каждого пользователя список группы, к которой он принадлежит?