Правила безопасности на основе запросов Firebase не работают на симуляторе - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь протестировать простой код в базе данных реального времени firebase -> Rules-> simulator, но он не может прочитать. Просто я пытаюсь этот простой код из документов

"JetonAlanlar" : {      
              ".write": "auth != null && !root.child('Banned').hasChild(auth.uid)",                 
              "Sorular":{
                "Tarih":{

                  ".read": "query.orderByKey && query.limitToFirst <=30"

                },
              }
          },

и это код запуска симулятора:

/JetonAlanlar/Sorular/Tarih

Симулятор сообщает, что разрешение на чтение запрещено. эта проблема на симуляторе или в базе данных Firebase Realtime не поддерживает правила, основанные на запросах.

Editted:

это мой код, который запрашивает в приложении для Android

public class SorularFragmentYeni extends SoruAdaptor {


    public SorularFragmentYeni() {}

    @Override
    public Query getQuery(DatabaseReference databaseReference) {

    ... 

        return databaseReference.child("JetonAlanlar/Sorular").child("Tarih");
    }
}

также

public abstract class SoruAdaptor extends Fragment implements RewardedVideoAdListener {

...

public abstract Query getQuery(DatabaseReference databaseReference);

}

1 Ответ

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

Как прокомментировал Андре: симулятор правил для базы данных Firebase не позволяет вам симулировать запрос. Он просто моделирует чтение из местоположения или запись в местоположение. Это объясняет, почему ваше чтение не работает: ваши правила разрешают только запрос, а симулятор не использует запрос.

Ваш код также не возвращает запрос:

databaseReference.child("JetonAlanlar/Sorular").child("Tarih")

Этот код - просто чтение из местоположения, которое не разрешено вашими правилами безопасности. Если вы хотите разрешить эту операцию чтения, ваши правила должны быть:

"JetonAlanlar" : {      
  "Sorular":{
    "Tarih":{
      ".read": true
    }
  }
}

Если вы хотите сохранить свои текущие правила, вам нужно убедиться, что ваш код соответствует тому, что позволяет запрос:

public Query getQuery(DatabaseReference databaseReference) {

    ... 

    return databaseReference.child("JetonAlanlar/Sorular").child("Tarih")
                            .orderByKey().limitToFirst(30);
}

Распространено заблуждение думать, что правила безопасности добавят вам последние два пункта. Однако правила безопасности Firebase работают не так: Firebase просто проверяет, разрешен ли ваш запрос в соответствии с правилами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...