Как заблокировать пользователей, использующих Firebase в качестве бэкэнда? - PullRequest
0 голосов
/ 02 марта 2020

Попытка разрешить пользователям блокировать других пользователей. Значение блока: сообщения от заблокированных пользователей больше не будут отображаться в ленте.

База данных Firebase:

/databaseRoot
    /userId1
       blockeduserId1 : true
       blockeduserId2 : true
   /posts
       childByAutoId1 :  //users data
       childByAutoId2 :  //users data

И я установил правила в базе данных Firebase следующим образом:

{
  /* Visit https://firebase.google.com/docs/database/security to learn more about security rules. */
  "rules": {

    "posts": {
      ".read": true,
      ".write": true
    },

      "users": {
        "$user_id":{
              ".read": "!root.child('blocked/'+$user_id+'/'+auth.uid+'/true').exists()",
                        ".write": true
        }
      }

  }
}

Проблема: приведенный выше код просто блокирует пользователя, который блокирует чтение любых сообщений. Т.е. не просто отфильтровывать заблокированных пользователей. Есть ли какие-либо указатели относительно вопроса?

1 Ответ

0 голосов
/ 02 марта 2020

Согласно документации, правила не являются фильтрами . Вы не можете использовать правила, чтобы изменить результирующий набор запроса. Либо запрос может получить каждого подходящего потомка, либо он отклонен. Правила не будут оценивать правила для каждого отдельного дочернего элемента, чтобы определить, следует ли его отправлять обратно клиенту.

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

...