как получить только определенный узел в базе данных Firebase - PullRequest
2 голосов
/ 13 мая 2019

Безопасность на основе правил Firebase не возвращает узлы, которые доступны для чтения

База данных в реальном времени состоит из трех узлов: productA, productB и productC на корневом уровне, я хочу разрешить только узел A иB читать, но не на уровне C.Симулятор Firebase дает правильный результат, когда на этих уровнях, когда я пытаюсь код ниже, он не читает значения

myDatabaseReference = FirebaseDatabase.getInstance().getReference("/"); // does  not work

//myDatabaseReference = FirebaseDatabase.getInstance().getReference("/productA"); // does work
...
myDatabaseReference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                Iterable<DataSnapshot> snapshotIterator = dataSnapshot.getChildren();


                Iterator<DataSnapshot> iterator = snapshotIterator.iterator();

                while ((iterator.hasNext())) {

                    Object node= iterator.next();
                    String NodeKey = ((DataSnapshot) node).getKey();
                    Object NodeValue = ((DataSnapshot) node).getValue();
                    // dosomething
                }


            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
                ItemList.add(databaseError.getMessage());
            }
        });

onDataChange должен запускаться, когда корневой узел указан в getReference

Данныепохоже на enter image description here.

повторы симулятора enter image description here и enter image description here

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Когда разрешения правил .read и .write оцениваются как true , это каскадно относится ко всем дочерним элементам правила.

, но ложность не является каскадной

Когда разрешения для правил .read и .write оцениваются как false , это не каскадно относится ко всемправят дети.

источник

1 голос
/ 13 мая 2019

Правила безопасности Firebase не фильтруют ваши данные . Они просто подтверждают, что операция чтения разрешена. Поэтому, если вы присоединяете слушателя к корню, он проверяет, есть ли у вас разрешение на чтение в корне. Поскольку у вас нет разрешения на чтение, вся операция чтения отклонена.

Эмулятор выдаст тот же результат, если вы также скажете ему прочитать рут (/).

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