Firebase实时数据库规则-允许多个用户访问以列出所有消息

时间:2019-08-04 14:05:54

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

我想授予 多个 用户访问权限,以获取他们可以在Firebase Realtime数据库中访问的“消息”的集合。数据库提取将读取“ / messages”,并返回用户有权访问的所有消息的集合。数据库结构如下:

"messages" : {
  "-L123456789": {
    "access": {
      "author": "user-one-id-987654"
      "assigned-user-id-1234": "assigned-user-id-1234"
    }
    "data" : {
      "theData": "Hello world!"
    }
  }
}

我创建了以下规则:

{
  "rules": {
    "messages": {
      "$message_id": {
        "data": {
          ".read": "
            //if author or assigned user
            data.parent().child('access').child('author').val() === auth.uid ||
            data.parent().child('access').child(auth.uid).exists()
          ",
          ".write": "false"
      }
    }
  }
}

但是,我无法列出列出为作者或指定用户的所有邮件。

什么规则将允许列为“作者”(user-one-id-987654)或“已分配用户”(assigned-user-id-1234)的用户简单地获取他们有权访问的所有邮件的集合阅读“ / messages /”数据库路径?

我猜答案可能是“消息”的根源?

我尝试了以下规则-它授予所有经过身份验证的用户访问权限-但我只希望返回该用户被列为“作者”或“已分配用户”的集合。

{
  "rules": {
    "messages": {
      ".read": "auth.uid !== null"
    }
  }
}

亲切的问候 / K

1 个答案:

答案 0 :(得分:1)

Firebase服务器端安全规则不能用于过滤数据。将侦听器附加到数据库时,服务器将检查该侦听器是否保证始终满足规则(无论数据如何)。如果不符合规则,则立即拒绝侦听器。

因此,如果将侦听器附加到self,服务器将检查您是否具有对/messages的读取权限。而且由于您不这样做,它会拒绝侦听器。

如果要允许用户阅读其所有者的邮件,则需要两件事:

  1. 仅检索用户拥有的消息的查询。
  2. 确保仅允许查询的安全规则。

有关更多信息,请参见Firebase documentation on securely querying datablog post introducing this feature