【问题标题】:Query firebase objects by user按用户查询 firebase 对象
【发布时间】:2013-09-25 10:22:04
【问题描述】:

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

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

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

感谢您的帮助

【问题讨论】:

    标签: firebase angularfire firebase-security


    【解决方案1】:

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

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

    【讨论】:

    • 反规范化工作正常,但 AngularFire 目前不支持将用户的对象集放入您的范围集合。为此,您还需要 AngularFire 的实验分支,如下所述:github.com/firebase/angularFire/issues/92
    猜你喜欢
    • 2016-08-17
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    相关资源
    最近更新 更多