【问题标题】:how to retreive only certain node in firebase database如何仅检索firebase数据库中的某些节点
【发布时间】:2019-09-29 22:25:35
【问题描述】:

基于 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());
            }
        });

在 getReference 中指定根节点时应触发 onDataChange

数据类似于

模拟器返回

【问题讨论】:

    标签: android firebase firebase-realtime-database firebase-security


    【解决方案1】:

    Firebase 的 security rules don't filter your data。他们只是验证允许读取操作。因此,如果您将侦听器附加到根,它会检查您是否具有根的读取权限。由于你在那里没有读取权限,所以整个读取操作都会被拒绝。

    如果您还告诉它读取根目录 (/),模拟器将给出相同的结果。

    【讨论】:

    • 谢谢,我怎样才能通过以不同的方式修改规则或 DatabaseReference 来达到同样的效果
    • 您必须能够从客户端过滤您希望允许的数据,然后可以使用规则来验证查询。见firebase.google.com/docs/database/security/…
    【解决方案2】:

    当 .read 和 .write 规则权限评估为 true 时,这将级联到规则的所有子级。

    但虚假不是级联的

    当 .read 和 .write 规则权限评估为 false 时,这将级联到所有规则的子级。

    source

    【讨论】:

      猜你喜欢
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 2019-02-07
      • 1970-01-01
      相关资源
      最近更新 更多