如何在不分离每个字段的情况下创建Firebase表...以确保安全性?

时间:2017-06-27 23:50:19

标签: firebase firebase-security

所以我正在深入研究Firebase安全规则,据我所知,树中更高级别的规则会进一步向下延伸到树中。

所以我想知道是否有办法让案例工作,我基本上有一个/bands子树,我希望任何人都可以编写,但是有adminsmembers子树我希望只根据特殊情况编写。

到目前为止,这是我的意思:

{
  "rules": {
    ".read": "auth != null",
    "bands": {
       "$bandId": {
          ".write": "auth !== null",
          "$bandId": {
            ".write": "auth !== null && data.child('creator_id').val() === auth.uid"
          }
       }
     }
  }
}

当我去测试“写作”时,在Firebase模拟器中,/bands/-KnLeIHM4zCspwBZjZP9之类的地方creator_id与我提供的指定auth.uid不匹配,我仍然会得到一个模拟器写入成功,因为/bands树级具有写访问权。

是否有任何聪明的方法可以让任何人“推”到/bands但是当它降到实际/bands/$bandId级别时,它会开始查看这些不同的条件?或者我将不得不重新修改我的数据并将树木分成更多的树木?我有其他情况需要这种事情,但这是我正在使用的最简洁的版本,我需要解决。

有什么想法?在此先感谢:)

1 个答案:

答案 0 :(得分:1)

{
  "rules": {
    "bands": {
      ".read": "auth != null",
      ".write": "!data.exists() && auth != null",
      "$bandId": {
        ".write": "data.child('creator_id').val() === auth.uid"
      }
    }
  }
}

".write": "!data.exists() && auth != null"只允许经过身份验证的用户写入bands内的路径(如果它们不存在)(创建新内容)。