1

我正在使用 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 中较低级别的嵌套,我只是无法理解如何编写允许节点及其子节点创建一次,但也允许任意数量的子节点的规则如果您经过适当的身份验证,则在共享下写入或覆盖。

有谁知道我如何编写规则来完成我想要做的事情?

编辑:我认为还值得一提的是,当我尝试将侦听器也指向我的节点时,我得到了权限被拒绝的错误。

4

1 回答 1

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"
            }
          }
        }
    }
}
于 2015-07-26T06:34:56.247 回答