2017-08-01 36 views
1

我有沿着这条线的东西火力结构 -火力地堡规则,以防止删除

root { 
groups { 
    gid: { //group ID 
     authid: ... //group creator's uid 
     members: { //uid of members 
      ... 
     } 
     posts: { 
      ... //posts ID 
     } 
    } 
    } 
} 

我想这些功能 -

  1. 任何用户都可以创建新组。这意味着我需要为每个授权的人授予对“/ groups /”的写入权限。但是它们不应该将null设置为整个节点。所以,我可以做到这一点".write":"(!data.exists() && auth.uid != null) || (data.exists() && newData.exists()"
  2. 只有作者可以删除一个组。这意味着我需要 赋予作者将个别组节点设置为null的权限。这是我卡住的部分。因为较浅的规则会覆盖较深的规则。所以,如果我只是写

    “组”:{ “$ GID”:{ ” .WRITE “:” newData.exists()& & data.child( 'AUTHID')VAL()=! == auth.uid“ } }

    这将被忽略。

  3. 我不希望任何人,甚至作者将null设置为组中的单个节点。这意味着作者可以删除整个组,但不是说,成员节点

回答

1

现在您要求在写入操作后没有数据。

你想要什么,要么没有数据

".write": " 
    (data.exists() && !newData.exists() && data.child('authid').val() === auth.uid) 
|| (data.exists() && newData.exists() && data.child('members').child(auth.uid).exists()) 
|| (!data.exists() && newData.child('authid').val() === auth.uid) 
" 

线:

  1. 允许由业主删除。
  2. 允许任何成员更新(假定所有者也是成员)。
  3. 允许任何人创建,只要他们使自己的所有者)。
+1

我要求任何人都可以创建一个组。谁创建一个团体将成为所有者。但是,并非每个人都可以更新该组。只有会员可以更新,但只有“帖子”节点 –

+0

这些规则不是什么?我可能错过了某些东西,在这种情况下,获得帮助的最佳方式是显示不符合要求的操作的代码。 –

+0

我已更新该问题。我删除了帖子部分和成员部分 –