会员安全

时间:2014-10-21 12:52:39

标签: firebase firebase-security

我有以下数据结构,我希望仅对在特定项目的成员列表中列出的用户授予对project1 ... projectN 的写访问权限。对于身份验证,我使用的是Simplelogin机制。

数据结构

|---projects
|       |---project1
|       |       |---members
|       |              |---simpleloginXXX : true
|       |              |---simpleloginXYZ : true
|       |---project2
|       |       |---members
|       |              |---simpleloginEFG : true
|       |              |---simpleloginXYZ : true

有人可以告诉我如何定义此规则吗?或者我是否必须重新组织数据结构?

感谢。

1 个答案:

答案 0 :(得分:2)

这样的事情只允许用户写入项目,如果他们是该项目的成员:

{
    "projects": {
        "$project": {
            ".read": true, /* anyone can read */
            ".write": "root.child('projects/'+$project+'/members/'+auth.uid).exists()"
        }
    }
}

更新:允许所有用户查看所有项目的列表

正如您已经发现的那样:如果您要列出所有用户的所有项目,则需要将.read放在$project之外:

{
    "projects": {
        ".read": true,
        "$project": {
            ".read": true, /* anyone can read */
            ".write": "root.child('projects/'+$project+'/members/'+auth.uid).exists()"
        }
    }
}

更新:仅允许成员阅读项目

这些规则允许用户只查看他们所属的项目。

{
    "projects": {
        "$project": {
            ".read": "root.child('projects/'+$project+'/members/'+auth.uid).exists()",
            ".write": "root.child('projects/'+$project+'/members/'+auth.uid).exists()"
        }
    }
}