我正在使用Firebase规则配置来控制对数据库的读/写访问权限。我原本写了更多的规则,但是我在故障排除期间减少了一些事情。这是我当前的规则配置:
{
"rules": {
"developers": {
"$dev": {
".write": "!data.exists() && auth != null",
".read": "auth.devBucket === $dev",
"$proj": {
".read": "auth.devBucket === $proj",
"shared": {
".write": "!data.exists() || (auth.devBucket === $dev && auth.projBucket === $proj)"
}
}
}
}
}
}
我尝试做的是允许Firebase用户创建$dev
节点,$proj
节点和共享节点,只要它们不存在并且用户已通过身份验证。然后,我希望允许用户在共享节点内具有免费写入权限,只要他们的身份验证令牌的devBucket与他们在其中写入的$dev
节点及其身份验证令牌相匹配即可。 s projBucket匹配他们正在写的$proj
节点。我使用适用于Android的Firebase自定义身份验证系统,并且已经使用这些devBucket和projBucket变量加载了我的令牌。身份验证肯定会根据我的logcat
运行,但我肯定会通过我当前的规则获得权限拒绝错误。我已经在这里倾注了Firebase规则文档和问题好几天了,我仍然对他们的规则系统如何工作的细微差别感到困惑。
根据文档规则在JSON中进行较低级别的嵌套,我很难理解如何编写允许节点及其子节点创建一次的规则,但如果您经过适当的身份验证,也允许在共享下编写或覆盖任意数量的孩子。
有没有人知道如何编写规则来完成我想要做的事情?
编辑:我认为值得一提的是,当我尝试将侦听器指向我的节点时,我的权限被拒绝了。
答案 0 :(得分:0)
我找到了适合我的配置。
{
"rules": {
"developers": {
".write": "!data.exists() || auth != null",
".read": "auth != null",
"$dev": {
".write": "!data.exists() || (auth != null && auth.devBucket == $dev)",
".read": "auth != null && auth.devBucket == $dev",
"$proj": {
".write": "!data.exists() || (auth != null && auth.projBucket == $proj)",
".read": "auth != null && auth.projBucket == $proj"
}
}
}
}
}