按用户查询firebase对象

时间:2013-09-25 10:22:04

标签: firebase angularfire firebase-security

我的数据结构如下:

{
  "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”移动到“farm”级别,则会导致授予对整个列表的读取权限。

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

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

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

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