检索Firebase对象时,故意不返回子值

时间:2014-10-17 18:07:23

标签: angularjs security firebase angularfire

我的firebase数据库中有一个user对象,其中包含一些敏感日期(例如电子邮件)。

对于需要获取用户信息(不是当前用户)的情况,如何防止返回此数据? (例如,如果用户可以查看其他用户的个人资料数据。)

选项

  1. 使用Firebase security rules:此选项的问题是,在尝试检索用户对象时会抛出大量错误(即使我只想“隐藏”该用户对象下的敏感子值)。

  2. 重构我的数据,以便公共和私有数据位于两个不同的路径中。

  3. 选项#2对我来说似乎是可行的,但我想在进行重大架构改造之前检查一下,没有更简单的解决方案?

1 个答案:

答案 0 :(得分:1)

关于安全规则,Firebase操作是全有或全无。

因此,尝试加载/users/<uid>处的所有数据都将失败,因为您的客户端无权读取该位置的所有数据,但您确实有权阅读某些数据那里的数据。同样,写入某个位置的行为方式相同,并且在您的操作继续之前需要完全权限。

要处理此用例,请考虑重构您的数据:

{
  "rules": {
    ".read": false,
    ".write": false,
    "users": {
       "$uid": {
         // Users can read / write all of their own data
         ".write": "auth != null && auth.uid == $uid"
         "public": {
           // public data goes here
           ".read": true // Make all of this data public
         },
         "private": {
           // private data goes here
         }
       }
    }
  }
}