2013-09-25 87 views
1

火力对象我有一个数据结构,看起来像:查询用户

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

当我询问“/农场”我想获得该认证的用户是所有者的农场列表。我还想阻止用户查看他们不是所有者的农场。

我目前的规则是这样的:

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

我得到通过将.read在这个水平上,我授予时通过/农场/访问读取访问单个农场:farmid。如果将“.read”移动到“农场”级别,则会导致对整个列表的读访问权限。

所以我认为我需要重组我的数据,但不知道如何最好地去做这件事?我不想在用户对象下面添加农场对象,因为我想要将任意数量的“编辑者”用户添加到任何给定的农场。

感谢您的帮助

回答

2

你需要进行非规范化的数据,包括每个用户的配置文件下到各个农场对象的引用。在这篇博客文章中有一个完整的例子来说明如何实现这种反规范化:https://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.html

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

+0

取消规范化工作正常,但将用户的对象集合放入作用域集合中,目前AngularFire不支持。 为了做到这一点,你还需要AngularFire的实验分支,如下所述:https://github.com/firebase/angularFire/issues/92 –