У меня есть 2 вопроса, связанных с базой данных Firebase в реальном времени.
Q1) Можно ли скрыть определенный узел от публики, и только один человек имеет доступ к этому узлу?
(Я хочу сохранить ключ транзакции в базе данных, и только 1-2 человека могут получить доступ к этому ключу из базы данных.)
Q2) Если мои правила безопасности для базы данных установлены как общедоступные, может ли кто-либо загрузить/получить доступ к полным данным, или они должны знать структуру, чтобы получить доступ к данным из базы данных.
А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, представляющее ваши данные, без необходимости знать его структуру.
еще одна вещь, как упоминалось выше, что представляют собой «другие узлы» в структуре? например, если у меня есть 8 узлов, из которых я должен скрыть 1, а остальные 6 открыты для публики, как я могу установить правила?
Вы должны создать правило для каждого узла, аналогичное правилу для других узлов.
Но это может быть беспокойным процессом, если у меня много узлов. Любая упрощенная идея, которая представляет один для всех?
Да, поместите все эти узлы под основной корневой узел.
Спасибо! @Рено