我有一个使用Firebase实时数据库的应用。 该应用允许用户使用项目。每个用户都可以访问其他用户与他共享的项目和项目。用户可以创建新项目并与其他用户共享他的项目。
该应用只是一个托管在静态html服务器上的HTML页面。
我想到了编辑现有项目的数据结构和安全规则。这是我的数据结构:
{
users:
{
$userId:{
///private user data
}
},
project:
{
$projectId:{
data:{...},
permissions:{
$userId:"owner"|"read"|"write"
}
}
}
}
这是我的安全规则:
{
"rules": {
"users": {
"$uid": {
".read": "$uid === auth.uid",
".write": "$uid === auth.uid"
}
},
"project":{
"$projectId":
{
".write":"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'"
}
}
},
}
}
这允许用户只有在项目权限中提及项目时才读取项目,如果项目被提及为所有者则写入项目的根目录,如果项目拥有写入权限则写入项目数据。
问题:
我坚持创建新项目。我应该编写哪些安全规则以允许任何经过身份验证的用户创建新项目?在Project / {newprojectId} / ...中创建/写入新节点(如果它不存在)。正如我所提到的,我只有一个静态HTML页面而且没有后端逻辑,我更喜欢保持这样,在最坏的情况下我会考虑Firebase功能。