#firebase #firebase-realtime-database #firebase-security
#firebase #firebase-база данных в реальном времени #firebase-безопасность
Вопрос:
Я столкнулся с серьезной проблемой с правилом безопасности Firebase. Я хочу установить read
значение false для заблокированного пользователя при поиске. Вот моя структура базы данных.
users:{
uid1:{
name:"Joe",
created:1226287
},
uid2:{
name:"John",
created:1273725
},
uid3:{...},
uid4:{...},
...
},
blocked:{
uid1:{
uid2: true,
uid4: true
}
}
Рассмотрим приведенную выше структуру, предположим, что user2
выполните поиск пользователя в users
node по имени, введя «Joe», и нажмите enter. Я установил свое правило firebase следующим образом.
users:{
$uid:{
".read":"!root.child('blocked').child($uid).hasChild(auth.uid)"
}
}
Это правило отлично работает, если user2
запрашивать user/user1
путь. Но при user2
поиске, как я могу помешать ему получить заблокированные пользовательские данные.
Ответ №1:
Не существует прямого способа получения списков пользователей, которые не заблокировали этого конкретного пользователя. Но если пользователь выполняет поиск на основе имени пользователя или каких-либо других пользовательских критериев, то лучшим инструментом являются функции Firebase.
Шаг к реализации функции (учитывая, что поиск основан на имени) (Со стороны клиента вы вызываете функции firebase и передаете имя поиска):
- получить все данные пользователя, которые имеют одинаковое имя.
- получить всех пользователей (или пользователей с таким же именем), которые заблокировали запрашивающего пользователя.
- извлеките всех пользователей, которые заблокировали запрошенного пользователя.
- отправьте обратно список пользователей запрошенному пользователю.
Почему функция Firebase является оптимальным выбором в данной ситуации? Потому что функции выполняются в защищенной среде и могут обходить правила безопасности.
Комментарии:
1. Это лучший и единственный способ реализовать функцию поиска? (Чтобы использовать облачную функцию, я должен обновить свою учетную запись до плана оплаты по мере поступления , и моей страны, Мьянмы, нет в списке при создании учетной записи для выставления счетов. :'( )
2. С моей точки зрения, я не вижу другого способа сделать это. Сохранение логики получения разблокированных пользователей на стороне клиента может быть рискованным (и, к вашему сведению, я не буду предлагать вам это делать). Чтобы преодолеть это, вы можете использовать функции firebase, которые выполняются в безопасной среде, вдали от клиентской части.
3. И о создании учетной записи для выставления счетов в Мьянме, ознакомьтесь с некоторым сообщением об этом. Кто-то, возможно, столкнулся с этой проблемой и, возможно, предложил какое-то решение для нее.
4. Я не нашел решения о создании платежной учетной записи из Мьянмы. Я связался со справочной организацией, и они ответили подождать. :'(