Как скрыть определенный узел в базе данных Firebase в реальном времени

У меня есть 2 вопроса, связанных с базой данных Firebase в реальном времени.

Q1) Можно ли скрыть определенный узел от публики, и только один человек имеет доступ к этому узлу?

(Я хочу сохранить ключ транзакции в базе данных, и только 1-2 человека могут получить доступ к этому ключу из базы данных.)

Q2) Если мои правила безопасности для базы данных установлены как общедоступные, может ли кто-либо загрузить/получить доступ к полным данным, или они должны знать структуру, чтобы получить доступ к данным из базы данных.

Интеграция Angular - Firebase Analytics
Интеграция Angular - Firebase Analytics
Узнайте, как настроить Firebase Analytics и отслеживать поведение пользователей в вашем приложении Angular.
1
0
299
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

А1/ Да, можно ограничить доступ к определенному узлу только для подмножества пользователей. Для этого есть несколько подходов. Если это небольшое и более или менее стабильное подмножество пользователей, вы можете проверить, содержится ли их uid в определенном узле со списком uid пользователей-администраторов, как показано ниже:

{
  "rules": {
    "secretnode": {
      //only an admin user can read
      ".read": "auth != null && root.child('adminusers/' + auth.uid).exists()"
    },
    "adminusers": {
        ".read": false,
        ".write": false
    },
    "othernodes": {
        ".read": true,
        ".write": true     
    }
  }
}

И, например, в базе данных вы сохраняете uid администратора следующим образом:

DBRoot
   - adminusers
        - uid1
           - name: "aaaaaa"
           - otherDataItem: "xxxxxx"
        - uid2
           - name: "bbbbb"
           - otherDataItem: "yyyy"

А2/ Да, если ваши правила безопасности для базы данных корень установлены как общедоступные, "любой (может) загрузить/получить доступ к полным данным". Обратите внимание, что, как поясняется в документация:

Shallower security rules override rules at deeper paths. Child rules can only grant additional privileges to what parent nodes have already declared. They cannot revoke a read or write privilege.

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

Спасибо! @Рено

Ghulam Ahmed 22.05.2019 16:48

еще одна вещь, как упоминалось выше, что представляют собой «другие узлы» в структуре? например, если у меня есть 8 узлов, из которых я должен скрыть 1, а остальные 6 открыты для публики, как я могу установить правила?

Ghulam Ahmed 22.05.2019 17:02

Вы должны создать правило для каждого узла, аналогичное правилу для других узлов.

Renaud Tarnec 22.05.2019 17:26

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

Ghulam Ahmed 22.05.2019 18:37

Да, поместите все эти узлы под основной корневой узел.

Renaud Tarnec 22.05.2019 18:38

Другие вопросы по теме