有没有一种有效的方法在Firebase中的节点列表上实现安全规则,以防止许多网络连接和查询?

我正在使用用户列表进行应用程序,并且每个用户都有他们想要与朋友列表中的人共享的帖子列表(基本上有点像社交网络) .

一种方法是具有“/ users”表,其中每个用户在其用户节点下具有朋友“/ users / xxx / friends”的列表,以及他们自己的帖子“/ users / xxx / posts”的列表 . 要查询所有朋友的近期帖子,需要许多Firebase查询,每个用户的朋友的“帖子”节点都有一个查询 .

{
  "users" : {
    "FKOZlhz05xrVvKGl2" : {
      "name" : "John Smith",
      "friends" : {
        "Tz7Ztv546lOaowrq2" : true
      }
     "posts" : {
        "-Kc-n235d5" : {
          "text" : "This is a status update"
        }
    },
    "Tz7Zt546jlOaowrq2" : {
      "name" : "Helen test",
      "friends" : {
        "FKOZlhz05xrVvKGl2" : true
      },
      "posts" : {
        "-Kc-neow05" : {
          "text" : "Another status update"
        },
        "-Kc-ab3243" : {
          "text" : "Feeling confused"
        }
      }
    }
}

如果有人想要查询其朋友列表中的所有人的“帖子”,则需要多个同时查询,因为Firebase不允许某人查询整个“用户”表并过滤掉不在朋友列表中的任何内容 .

另一种选择是为所有用户提供单独的“/ posts”列表,可以在一个操作中查询 . 但是,在这种情况下,还无法实施安全规则来过滤掉您朋友的帖子,因为Firebase不允许根据安全规则过滤“帖子”列表 .

我可以看到只查找朋友列表中的人的“帖子”列表的唯一方法是为每个朋友启动多个同时查询 .