Как установить правила базы данных Firebase для приложения группового обмена сообщениями - PullRequest
0 голосов
/ 02 января 2019

Я установил правила базы данных Firebase для приложения группового обмена сообщениями.Но теперь, даже когда аутентифицированный пользователь пытается отправить сообщение, оно не отображается.

Я работаю над приложением группового обмена сообщениями.Код можно найти по следующей ссылке .При создании приложения я использовал правила по умолчанию для базы данных Firebase.Но сейчас я пытаюсь установить правила, чтобы все uid, доступные в узле members, могли видеть или отправлять сообщения в эту конкретную группу.Ниже приведены последние правила, которые я создал.Ниже моя подробная структура базы данных после создания плана.Обратите внимание, что я использую Аутентификацию телефона Firebase.По этой причине я создаю пользовательский узел, который отслеживает uid для каждого зарегистрированного номера.Когда пользователь выбирает участников, которые будут добавлены в группу, я проверяю эти числа по их соответствующим uid, а затем добавляю эти uid в узел участника.

{
  "rules": {
    "plan":{
      "$planID":{
        "messages":{
          ".read":"data.parent().child('members').child(auth.uid).exists()",
          ".write":"data.parent().child('members').child(auth.uid).exists()"
        }
      }
    }
  }
}

Data Structure

Я ожидал, что аутентифицированные пользователи, которые были добавлены в узел участников, смогут читать и отправлять сообщения, но даже зарегистрированные пользователи не смогут создать новую группу или прочитать сообщения после публикации вышеуказанных правил.

1 Ответ

0 голосов
/ 02 января 2019
  1. При определении каждого подузла как целых, начиная с нуля (как вы это делали в members), Firebase автоматически интерпретирует весь узел, как если бы это был Массив объектов , и в этом случае вы не можете обращаться с ними, как будто они вообще были подузлами (вызывая child(auth.uid)).

    Цитировать по ссылке:

    В частности,если все ключи являются целыми числами, и более половины ключей от 0 до максимального ключа в объекте имеют непустые значения, то Firebase отобразит его как массив.Об этой последней части важно помнить.

    Поскольку это имеет место в вашей структуре данных, все подузлы members 'больше не считаются узлами.Они являются элементами массива и, следовательно, не являются children из members.

  2. Даже если это не так, и все они были подузлами - кажется, вы вызываетеchild(auth.uid) как если бы auth.uid было целым числом: все ваши "подузлы" целые числа , а auth.uid определено Строка .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...