Правила Firebase, позволяющие пользователям блокировать чтение данных другими пользователями - PullRequest
0 голосов
/ 29 июня 2018

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

Если пользователь A блокирует пользователя B, то пользователю B не разрешается просматривать профиль пользователя A и читать его данные. Те же функции, что и при блокировке пользователей в Instagram и Facebook. Я думаю, что приближаюсь, но я настроил узел в Firebase, который добавляет заблокированных пользователей.

В случае пользователя A и пользователя B база данных выглядит следующим образом:

-блокированный пользователь:
--- Пользователь A:
------ Пользователь B: true

Database.database().reference().child("blockedUser").child(currentUserId).child(userToBlock).setValue(true)

Так вот, как настроена моя база данных, так выглядят мои правила:

{
  "rules": {
    "users": {
      "$user_id": {
        "$blockedID" : {
            ".read": "auth != null && !root.child('blockedUser/'+$user_id+'/'+$blockedID+'/true').exists()",
           ".write": "$user_id === auth.uid"
        }
      }
    }
  }
}

У меня проблема с правилами. Что касается пользователя A и пользователя B, то как только пользователь B заблокирован, он не позволяет пользователю B читать любые данные в базе данных. То, чего я пытаюсь добиться, - это когда пользователь B заблокирован пользователем A, тогда это должно помешать пользователю B читать ТОЛЬКО данные пользователя A. Как я могу изменить свои правила, чтобы сделать это?

1 Ответ

0 голосов
/ 29 июня 2018

При вашем подходе вы запрещаете Пользователю B читать поле, содержащее информацию о блокировке. Вам нужно применить правило на другом иерархическом уровне. Используя auth.uid (в вашем сценарии пользователь B), вы можете запретить текущему пользователю читать любые данные определенного пользователя (в вашем сценарии пользователь A).

{
  "rules": {
    "users": {
      "$user_id": {
        ".read": "auth != null && !root.child('users').child($user_id).child(auth.uid).exists()",
        "$blockedID" : {
           ".write": "$user_id === auth.uid"
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...