为什么这两组相同的Firebase规则的工作方式却截然不同?

时间:2016-11-17 16:44:20

标签: firebase firebase-realtime-database firebase-security

这套规则工作正常,并按预期提供输出

{
"rules": {
  "intents" : {
    ".read" : "auth.uid === data.child('to').val()",
    ".write" : true
  },
  "messages" : {
    ".read":  "auth.uid !== null",
    "$message": {
           ".write": true
    }
  }
}
}

但是,这套规则不允许任何用户读取任何数据,尽管写操作在这个集合中工作正常。

{
"rules": {
  "intents" : {
    ".read" : "auth.uid === data.child('to').val()",
    ".write" : true
  },
  "messages" : {
    "$message": {
           ".read":  "auth.uid !== null",
           ".write": true
    }
  }
}
}

对我来说,这两套看起来几乎完全相同。是否有任何" Firebase安全规则"我失踪的规则?

注意这些规则都经过测试,未对数据库或任何代码进行任何更改。只显示了所显示的规则。

1 个答案:

答案 0 :(得分:2)

这两套规则有一个重要区别:第一套规则允许阅读"消息"在一个操作中,而另一个操作只允许一次读取任何单个消息。你可能试图在一次操作中读取所有消息,只有第一条规则才能让你这样做。

{
  "rules": {
    ...
    "messages" : {
      ".read":  "auth.uid !== null", // Here: Can read all at once
      "$message": {
        ".read":  "auth.uid !== null", // Here: Can only read one at a time
        ".write": true
      }
    }
  }
}