【问题标题】:Member based security基于成员的安全性
【发布时间】:2014-10-21 12:52:39
【问题描述】:

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

数据结构

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

谁能告诉我如何定义这个规则?还是我必须重新组织数据的结构?

谢谢。

【问题讨论】:

    标签: firebase firebase-security


    【解决方案1】:

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

    {
        "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()"
            }
        }
    }
    

    【讨论】:

    • 好的,谢谢!写入现在工作正常!读取权限必须在$project 部分之外,否则如果我想列出(读取)所有项目,我将获得拒绝权限。是否有可能将读取访问权限限制为仅在成员部分中定义了登录用户的那些项目?例如用户simpleloginXYZ 应该能够看到project1project2 但登录用户simpleloginXXX 应该只能看到project1?见上面的例子。
    • 当然,只需将相同的规则设置为.write。我将添加更多示例。如果这回答了您的问题,请不要忘记单击我的答案左侧的复选标记:meta.stackexchange.com/questions/5234/…
    • 不,从 firebaseIO 的文档和我的 firebase 上的测试来看,$project 内的规则 ".read": "root.child('projects/'+$project+'/members/'+auth.uid).exists()" 不会将读取权限限制为仅具有适当成员的项目。或者是否可以 overwrite 上层级别的规则?
    • 啊,确实是这样:一旦授予访问权限,就不能在较低级别将其取消。如果您希望用户查看所有项目(即使是他们无权访问的项目),您必须将“项目名称列表”存储在单独的节点中。
    猜你喜欢
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    相关资源
    最近更新 更多