Как установить правило чтения безопасности Firebase

#firebase #firebase-realtime-database #firebase-security

#firebase #firebase-база данных в реальном времени #firebase-безопасность

Вопрос:

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

 users:{
     $uid1:{
          name:"John",
          created:13739373,
          type:"PRIVATE"
           },
     $uid2:{
          name:"Susan",
          created:12393930,
          type:"PUBLIC"
           },
     $uid3:{
          name:"Titan",
          created:12582938,
          type:"CLOSED"
           }
   }
  

Итак, я установил read правило для пользователей следующим образом.

  ".read":"data.child('type').val()==='PUBLIC' || //if user is already friend, alse allow type CLOSED"
  

Как идеально настроить read правило для пользователей, если тип — PUBLIC или CLOSED (если два пользователя уже являются друзьями). Я не могу установить read правило в $uid , потому что это функция поиска.

Редактировать: Это мой friends путь.

    friends:{
               $uid1:{
                          $uid2: 1273738,  //friend since timestamp
                          $uid3: 1274693,
                          $uid4: 1284869,
                         ...
                    }
           }
  

Правка 2: PUBLIC это может видеть каждый, PRIVATE это никто не может видеть / искать и CLOSED это может видеть только друг.

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

1. Могу ли я узнать путь к данным друга? Например, где хранятся сведения о пользователе и его / ее друзьях.

2. @Sushan Sapaliga Я обновил свой вопрос. Теперь, как я должен запросить свой поиск?

3. Спасибо за обновление вопроса. Я опубликую ответ на ваш запрос.

4. Существует 3 типа type : PUBLIC , PRIVATE и CLOSED . PUBLIC все могут видеть, PRIVATE значит, только друзья могут видеть, и что насчет CLOSED ?

5. Я опубликовал ответ, ожидая ваших разъяснений о CLOSED типе.

Ответ №1:

Правила firebase в реальном времени, которые вам необходимо обновить, это,

 "users": {
      "$user_id":{ 
        ".read": "data.child('type').val() == 'PUBLIC' || (data.child('type').val() == 'CLOSED' amp;amp; auth != null amp;amp; root.child('friends').child($user_id).child(auth.uid).val() > 0 ) || (data.child('type').val() == 'PRIVATE' amp;amp; auth != null amp;amp; $user_id == auth.uid ) "
}
  

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

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

2. Я опубликовал все правило перехода, чтобы вы могли понять, для чего оно используется $user_id . А также я внес изменения в правила, если тип PRIVATE , никто не будет его читать, кроме пользователя-владельца.

3. Я изменил, как вы предложили, и протестировал в play ground. Мой путь users/{uid} и аутентифицирован. Но в правиле чтения отказано.

4. Я даже пытался ".read":"data.child('type').val()== 'PUBLIC' , но оно тоже отказало. Почему мне отказывают?

5. Можете ли вы загрузить снимок экрана с вашими данными, чтобы я мог воссоздать ошибку?