如何将Firebase Realtime数据库规则设置为只读子节点?

时间:2019-02-18 15:44:13

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

我有一个称为配置文件的节点,该节点具有ID​​列表。 我只想允许对子节点的读取访问,并阻止读取所有配置文件。

这是我的规则,但是它允许读取所有配置文件。

{
  "rules": {
      "profiles":{
        ".read": true,
        ".write": false  
      }
  }
} 

这就是我的个人资料

{
  "1" : {
    "id" : "1",
    "name" : "test1"
  },
  "2" : {
    "id" : "1",
    "name" : "test2"
  }
}

1 个答案:

答案 0 :(得分:0)

通常,您会将每个用户的配置文件存储在具有其Firebase身份验证UID值的密钥下。所以:

{
  "profiles": {
    "uidOfUser1": {
      "id" : "1",
      "name" : "test1"
    }
    "uidOfUser2": {
      "id" : "2",
      "name" : "test2"
    }
  }
}

在这种情况下,您可以使用以下规则对其进行保护:

{
  "rules": {
    "profiles": {
      "$user_id": {
        // grants read access to the owner of this user account
        // whose uid must exactly match the key ($user_id)
        ".read": "$user_id === auth.uid"
      }
    }
  }
}

在安全规则中,auth.uid的值是当前登录到Firebase身份验证的用户的UID。没有办法欺骗该值,因此这是保护数据访问的好方法。上述规则允许用户在其auth.uid与配置文件的密钥匹配时读取特定的配置文件。因此,uidOfUser1uidOfUser2

也请查看Firebase documentation on securing user data,它会对其进行更详细的描述。