获取.read和.write安全规则为组工作

时间:2015-08-27 20:39:00

标签: firebase angularfire

我在编写用于构建基于团队的协作平台的安全规则时遇到困难。

  1. 当用户注册时,他们应该能够创建一个团队并邀请用户加入该团队。
  2. 项目应由团队拥有。
  3. 只有该团队中的用户才能查看该项目。
  4. 用户只能看到他们所属的团队。
  5. 如何编写.read安全规则,以便用户只能看到他们所在的团队的信息?

    我应该只列出两支队伍,因为我属于他们github:8272012。

    当前安全规则:

    {
        "rules": {
            ".read": true, 
            "users": {
              "$user": {
                //can add a message if authenticated
                ".write": "auth.uid === $user" 
              }
            }, 
            "teams": {
                "$team": {
                    "users": {
                        // can write to the users list only if ADMINISTRATOR
                        "$user": {
                            ".write":"newData.parent().child(auth.uid).val() === 99"
                        }
                    }
                }
            },
            "projects": {
              "$team": {
                "$project": { 
                    //can add a message if they are a MEMBER
                    ".write": "(!data.exists() && newData.exists() && root.child('teams/' + $team + '/users/' + auth.uid).val() >= 10)"
                }
              }
            }
        }
    }
    

    我应该只列出两个团队,因为我属于他们github:8272012

    enter image description here

    enter image description here

1 个答案:

答案 0 :(得分:10)

以下安全规则仅为项目团队中的用户提供项目的读写访问权限(假设您为每个用户添加/projects节点以指示用户有权访问哪些项目):

"rules": {
  "projects": {
    "$project": {
      ".read": "root.child('users').child(auth.uid).child('projects').val().child($project).exists()" ,
      ".write": "root.child('users').child(auth.uid).child('projects').val().child($project).exists()" 
    }
  }
}

我无法看到您为每个项目存储的数据,但如果您存储对项目团队的引用,您也可以在安全规则中使用该数据。