Серьезная проблема правило чтения Firebase для заблокированного пользователя

#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 и передаете имя поиска):

  1. получить все данные пользователя, которые имеют одинаковое имя.
  2. получить всех пользователей (или пользователей с таким же именем), которые заблокировали запрашивающего пользователя.
  3. извлеките всех пользователей, которые заблокировали запрошенного пользователя.
  4. отправьте обратно список пользователей запрошенному пользователю.

Почему функция Firebase является оптимальным выбором в данной ситуации? Потому что функции выполняются в защищенной среде и могут обходить правила безопасности.

Подробнее о функциях читайте здесь.

Комментарии:

1. Это лучший и единственный способ реализовать функцию поиска? (Чтобы использовать облачную функцию, я должен обновить свою учетную запись до плана оплаты по мере поступления , и моей страны, Мьянмы, нет в списке при создании учетной записи для выставления счетов. :'( )

2. С моей точки зрения, я не вижу другого способа сделать это. Сохранение логики получения разблокированных пользователей на стороне клиента может быть рискованным (и, к вашему сведению, я не буду предлагать вам это делать). Чтобы преодолеть это, вы можете использовать функции firebase, которые выполняются в безопасной среде, вдали от клиентской части.

3. И о создании учетной записи для выставления счетов в Мьянме, ознакомьтесь с некоторым сообщением об этом. Кто-то, возможно, столкнулся с этой проблемой и, возможно, предложил какое-то решение для нее.

4. Я не нашел решения о создании платежной учетной записи из Мьянмы. Я связался со справочной организацией, и они ответили подождать. :'(