Firebase规则不允许从数据库读取

时间:2018-03-04 17:56:49

标签: java android firebase firebase-realtime-database

我遇到的问题是,通过下面显示的以下firebase规则,经过身份验证的用户可以成功写入数据库但无法从中读取,因为我得到了“#34;权限被拒绝"在控制台中。当我将读取和写入都设置为true(public)时,读取和写入功能都正常工作。我从数据库中读取的代码也如下所示:

{
  "users" : {
    "9kV3otdvOXU0ssMZWIdfggrBrj63" : {
      "Citrus" : [ "orange", "lime", "mandarin", "lemon" ],
      "Fruit" : [ "apple", "banana", "mango" ],
      "Meat" : [ "beef", "pork", "lamb", "chicken" ],
      "Veg" : [ "tomato", "potato", "cabbage" ]
    }
  }
}

规则:

W/SyncTree: Listen at / failed: DatabaseError: Permission denied

示例数据库:

_.mapKeys(action.payload.data)

这是确切的错误:

return _.mapKeys(action.payload.data);

1 个答案:

答案 0 :(得分:0)

正如Doug已经评论过的那样,如果没有看到您将监听者附加到哪些数据,那么很难提供帮助(因此key1, key2, key100DatabaseReference上的addValueListener也是如此。但是从听众的这段代码来看,你似乎正在倾听addListenerForSingleValueEvent

/

您的所有用户都无权阅读dataSnapshot.child("users") ,因为您只能授予他们访问/的权限。您的代码现在不仅违反了您的安全规则,如果它有效,它将下载的数据超出了所需的数量。

相反,您应该将侦听器附加到JSON树中的最低级别,该级别包含您需要的所有数据(并具有读取权限)。在你的情况下似乎是/users/$uid,所以你要做:

/users/$uid