我正在使用 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
他们正在写入的节点匹配,并且他们的身份验证令牌的 projBucket 与$proj
他们正在写入的节点匹配。我正在使用适用于 Android 的 Firebase 自定义身份验证系统,并且我已经使用这些 devBucket 和 projBucket 变量加载了我的令牌。身份验证肯定是根据我的logcat
,但我目前的规则肯定会出现权限被拒绝错误。几天来,我一直在这里讨论 Firebase 规则文档和问题,但我仍然对他们的规则系统如何工作的细微差别感到困惑。
根据文档规则执行到 JSON 中较低级别的嵌套,我只是无法理解如何编写允许节点及其子节点创建一次,但也允许任意数量的子节点的规则如果您经过适当的身份验证,则在共享下写入或覆盖。
有谁知道我如何编写规则来完成我想要做的事情?
编辑:我认为还值得一提的是,当我尝试将侦听器也指向我的节点时,我得到了权限被拒绝的错误。