根据嵌套节点

时间:2018-01-11 12:23:11

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

我有一个静态网页应用程序(没有后端服务器),它使用Firebase作为用户数据库(javascript客户端)。该数据库具有以下结构:

{
  users:
  {
     $userId:{
       ///private user data
     }
  },
  project:
  {
     $projectId:{
        data:{...},
        permissions:{
           $userId:"owner"|"read"|"write"
        }
     }
  }
}

用户只能访问他的私人数据和项目,其项目的权限中提到了他的ID。 这是安全规则

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    },
    "project":{
        "$projectId":
        {
          ".write":"auth!=null && (!data.exists() || root.child('project/'+$projectId+'/permissions/'+auth.uid).val()==='owner')",
          ".read":"root.child('project/'+$projectId+'/permissions/'+auth.uid).val()!==null",
          "data":{
            ".write":"root.child('project/'+$projectId+'/permissions/'+auth.uid).val()==='write'"
          }
        }
    }
  }
}

问题:

如何通过UserId查询所有项目? where project.permissions.contains(userId)或者至少如何获取当前用户有权阅读的所有子密钥?

如果我查询这个:

let query = firebaseApp.database().ref("/project").orderByKey();
let val = await query.once("value");

它会抛出一个错误“错误:在/ project上的permission_denied:客户端无权访问所需的数据。”

0 个答案:

没有答案