Firebase安全子节点

时间:2016-10-09 13:04:27

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

我在Firebase中有这个数据库结构:

    [bets]
      -KTd9VKWJwHd_L6j_oAF
        date
        team1
        etc
      -KTdCc7uVmueNtcYzU1m
        date
        team1
        etc
   [users]

我现在正在尝试编写Firebase规则,以允许用户只读取分配给他们的赌注。但我马上遇到了问题。我有这些非常基本的规则:

{
  "rules": {
    "bets": {
      "$bet": {
        ".read": true,
        ".write": true
      }
    }
  }
}

当我尝试访问/bets(我显示投注列表)时,我会抛出错误:

Error: permission_denied at /bets: Client doesn't have permission to access the desired data.

如果我将.read.write放在bets下而不是$bet下,则可以正常使用。我错过了什么?

1 个答案:

答案 0 :(得分:3)

Firebase会评估您附加侦听器的位置的读取权限。您将监听器附加到/bets,因此您拒绝监听器,因为您没有/bets的读取权限。

如果您拥有/bets的读取权限,您还可以阅读其下的所有内容。因此,这意味着您无法使用Firebase数据库安全规则来过滤数据。

请参阅Firebase文档中的rules are not filters部分。或者在这里搜索Firebase questions mentioning "rules are not filters",你会发现这是开发人员常见的陷阱。