Чтение подмножества базы данных firebase реального времени с ограничениями правил

#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’, которая выполняет условие, предоставляет каждому доступ ко всем данным.

Есть ли способ (в текущей структуре) запросить базу данных и получить из ветки «ГРУППЫ» все группы, к которым я принадлежу, добавив некоторые ограничения к правилам? или мне нужно поддерживать для каждого пользователя список группы, к которой он принадлежит?