代码之家  ›  专栏  ›  技术社区  ›  Fairlie Agile

按用户查询firebase对象

  •  1
  • Fairlie Agile  · 技术社区  · 13 年前

    我有一个数据结构,看起来像:

    {
      "farms" : {
        "-J3saHfe8_2GRqn3jOTc" : {
          "stockunits" : {
            "-J4CAeRI-IKKXVuNILCv" : {
              "name" : "Chickens",
              "totalStockUnits" : 115
            }
          },
          "owner" : 3,
          "name" : "smith"
        },
        "-J3sbbqsGabs5cLaj0zP" : {
          "owner" : 2,
          "name" : "brown"
        }
      }
    }
    

    当我查询“/farms”时,我想得到一个经过身份验证的用户是其所有者的农场列表。我还想防止用户查看他们不是所有者的农场。

    我的规则当前如下所示:

    {
      "rules": {
          ".write": false,
      ".read": false,
      "farms": {
        "$farm": {
            ".read": "data.child('owner').val() == auth.id"
    

    我通过将.read设置在这个级别来实现这一点,当通过/farms/:farmid访问时,我将授予对单个农场的读取访问权限。如果我将“.read”提升到“farms”级别,则会授予对整个列表的读取权限。

    所以我认为我需要重组我的数据,但不确定如何才能做到最好?我不想在用户对象下面添加farms对象,因为我也想在任何给定的farm中添加一些“编辑器”用户。

    谢谢你的帮助

    1 回复  |  直到 13 年前
        1
  •  2
  •   Anant    13 年前

    您需要取消数据的规范化,并在每个用户的配置文件下包含对单个场对象的引用。在这篇博客文章中有一个关于如何进行这种非规范化的完整例子: https://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.html

    在这个例子中,代码片段显示了在帖子下组织评论,您可以使用类似的技术将农场映射到用户。