【问题标题】:How would I cycle through all child nodes in Firebase and read all data nodes inside them in Javascript?我将如何循环浏览 Firebase 中的所有子节点并在 Javascript 中读取其中的所有数据节点?
【发布时间】:2018-12-23 13:30:58
【问题描述】:

我有一个系统,其中每个用户都有权读取一个或多个特定节点(但不是全部)。我将如何设置,以便在读取时循环浏览数据库中的所有子节点,然后它只会读取用户有权访问的那些?

非常感谢!

这是我目前必须做的: (有超过2家店)

var database = firebase.database();
var storeOneRef = database.ref().child('storeOne');
var storeTwoRef = database.ref().child('storeTwo');

var allStores = [ { ref: storeOneRef, name: 'storeOne'},
                    { ref: storeTwoRef, name: 'storeTwo'} ];
for (var i = 0; i < allStores.length; i++) {
    allStores[i].ref.once('value', (snapshot) => {
        var data = snapshot.val();
    });
}

这是数据库的样子:

【问题讨论】:

  • 这很模糊。你的数据库结构是什么?您是否使用安全规则?如果是这样,它们是什么?您已经尝试过哪些代码,如果是,有什么问题?
  • 例如:每个商店都有一个子节点,然后在该节点内有销售。当零售商想看到他们的销售时,他们只想看到自己的。我如何能够有一种全面的方式来做到这一点,而不是指定特定的节点?
  • 您还没有定义零售商如何知道哪些销售是他们自己的。你的数据库结构是什么?您是否使用安全规则?在得出结论之前,您需要定义这些内容。没有“一揽子解决方案”可以自动让您同时过滤和阻止。 firebase.google.com/docs/database/security/…
  • 每个零售商用户都有一个登录名,将使用 Firebase 数据库规则对一个零售商子节点进行身份验证。每个零售商子节点都有多个销售额。每笔销售都有多个字段描述日期、价格等。
  • 如果销售存储在零售商下面,听起来您没有问题。他们已经被授权阅读自己的销售数据。

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


【解决方案1】:

看起来您的数据库在它们所属的商店/零售节点下具有所有销售节点。如果您的商店/零售商之一已经拥有对他们自己节点的读取权限,那么他们将无条件地访问他们自己的所有销售。实际上,您无法采取任何措施来防止这种情况发生。如果某人在任何节点上具有读取权限,则他们隐含地对该节点下的所有子节点具有读取权限。

【讨论】:

  • 没错,没关系!我只是想知道是否有更好的方法来做到这一点,而不是我目前在该代码摘录中的做法,因为每次新零售商加入时我都必须创建一个新的参考。
  • 这并不是您最初的问题所要问的。现在,正如我所说,您的问题的答案是:在有问题的节点上迭代子节点没有问题。我建议重新开始并提出一个描述您遇到的问题的新问题。
猜你喜欢
  • 1970-01-01
  • 2018-09-22
  • 1970-01-01
  • 2019-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多