1

我有一个看起来像这样的数据结构:

{
  "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”级别,这将导致授予对整个列表的读取访问权限。

所以我认为我需要重组我的数据,但不确定如何最好地解决这个问题?我不想在用户对象下方添加农场对象,因为我还想向任何给定的农场添加许多“编辑器”用户。

谢谢你的帮助

4

1 回答 1

2

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

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

于 2013-09-26T19:09:05.263 回答