我有一个静态网页应用程序(没有后端服务器),它使用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:客户端无权访问所需的数据。”