管理团队权限并允许两个用户组成同一团队来访问节点

时间:2016-08-15 11:34:21

标签: firebase firebase-realtime-database firebase-authentication firebase-security

我允许使用Google登录我的Firebase网络应用。 我通过auth.uid控制对数据库的访问:

 {
  "rules": {
     "users": {
        "$uid": {          
          ".read": "auth.uid === $uid",
          ".write":"auth.uid !== null",
             "images": {
                ".read": "auth.uid === $uid",
                ".write":"auth.uid === $uid",
      },
 ...

我想让用户团队中的其他用户访问他/她的图片。我查看了文档,但找不到实现这一目标的方法。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

安全规则能够从其他密钥读取数据,因此可以构建基于密钥存在的规则(即团队成员资格)。

以下内容是我用于Firebase数据库的Bolt规则的一小部分:

path /teams/{$teamKey}/members/{$userId} is Boolean {
    ...
}

path /users/{$userId}/shares/{$teamKey} {
    ...
    read() { root.teams[$teamKey].members[auth.uid] !== null }
}

JSON看起来像这样:

...
"users": {
  "$userId": {
    ...
    "shares": {
      "$teamKey": {
        ...
        ".read": "root.child('teams').child($teamKey).child('members').child(auth.uid).val() != null",
        ...

希望这会有所帮助。基本上,团队有一个密钥,它包含用户ID(带有布尔值)。通过验证其成员资格(即,通过检查团队密钥下是否存在用户ID密钥),可以向其他团队成员授予对用户密钥下的共享信息的读取权限。实质上,您将驱动安全规则的数据存储在数据库本身中。

您不必使用Bolt,但我发现它比JSON表示更容易管理。 Bolt语言文档包含有关Bolt定义和JSON定义的RuleDataSnapshot Methods的信息。