2016-11-28 79 views
2

我有了家庭,A,B,C,d,并一个处于领先地位。我们有一名入侵者,E。我们只想要b,c,d读取/写入A的数据。火力地堡读/写权限对某些用户

所有这些字母(B,C d,...)将成为UID的

这是我到目前为止有:

大家进行身份验证的电子邮件。人们发送请求到A在他的小组允许。如果他接受,他们可以读/写他的。

数据库设计火力地堡

{ 
    "Leaders" : { 
    "A" : { 
     "ALLOWED" : { 
     "b" : 0, 
     "c" : 0, 
     "d" : 0 
     }, 
     "DATA" : { 
     "blah blah1" : "content writable by bcd", 
     "blah blah2" : "content writable by bcd" 
     }, 
     "REQUESTS" : { 
     "E" : 0 
     } 
    } 
    } 
} 

我可以用CRUD移动B,C,d但如何制定规则,使其遵循,只有人在允许的的可以阅读/为每位领导写数据?

{ 
    "rules": { 
    ".read": "auth != null", 
    ".write": "auth != null" 
    "Leaders":{ 
    ".write": "$uid == ????" 
    } 
    } 
} 

感谢您的帮助!如果当前领导下存在节点

+0

你已经在你的问题中包含了JSON树的图片。请将实际的JSON替换为文本,您可以通过单击Firebase数据库控制台中的导出JSON链接轻松获取该文本。将JSON作为文本可以搜索,使我们能够轻松使用它来测试您的实际数据,并将其用于我们的答案中,并且通常只是一件好事。 –

+0

@FrankvanPuffelen,啊!对不起,我不知道我们可以做到这一点,将在更新分钟 – DilllyBar

回答

4

应该检查的问题:

{ 
    "rules": { 
    "Leaders":{ 
     "$leaderuid": { 
     ".write": "$leaderuid == auth.uid", 
     "DATA": { 
      ".write": "data.parent().child('ALLOWED').child(auth.uid).exists()" 
     } 
     } 
    } 
    } 
} 

事情我改变:

  • 删除顶级读/写规则。否则,任何经过身份验证的用户都可以读取/写入所有数据,并且您再也不能在较低级别获取该许可。
  • 领导者可以编写他们的整个节点。我在这里使用auth.uid,如documentation on securing user data中所述。
  • 如果用户的uid存在于ALLOWED节点中,则只能在DATA下写入。
+0

嗨。你能解释一下“$ leaderuid”的含义吗?非常感谢这个回答 – DilllyBar

+0

我的意思是,当你有$ leaderuid $ {}时,这是什么情况? – DilllyBar

+0

另外还有一个错误发生是,预计在“数据”行的“,)” – DilllyBar