Firebase安全性和规则

时间:2016-03-29 11:54:54

标签: ios swift firebase

快点,我正试图了解Firebase安全协议,并设置了一个名为UsersDB的数据库,它将根据auth.uid存储详细信息。详细信息为全名,电子邮件,提供商,帐户创建日期,上次登录日期。

我设置了如下规则:

{
  "rules": {
    ".read": "auth != null", // only authed users can read/write
    ".write": "auth != null",
    "UsersDB": {
      "$uid": {
        ".read": "auth.uid == $uid", // users can read/write their own data
        ".write": "auth.uid == $uid"
      }
    }
  }

我的理解是,只有user_id与auth.uid匹配的人才能读取和写入记录。

我的问题是我是否已正确完成此操作,如果不是,我应该如何实现这一目标?我只希望创建帐户的人能够读取和写入此帐户,而不想让其他人访问该信息。

最后,作为firebase帐户的管理员。我想考虑创建一个管理控制台类型的软件,这将允许我访问存储的所有数据。如何更改或更新规则以允许管理员登录访问上述数据。我是否会将读取权限更改为任何人(虽然我认为这会在规则中留下漏洞)或者是否有办法声明规则,使我的(管理员)对所有数据具有完全读取权限?

谢谢

1 个答案:

答案 0 :(得分:2)

您忽略了Firebase文档的一个非常重要的部分,该文档指定了permissions cascade

  

安全和火灾规则从上到下工作

     

子规则只能为父节点已声明的内容授予额外权限。他们无法撤销读取或写入权限。

由于您的顶级读写规则已允许任何经过身份验证的用户读取/写入所有帐户,因此您无法撤消树中较低的权限。

幸运的是,您的方案中无需授予这些更高级别的权限。

{
  "rules": {
    "UsersDB": {
      "$uid": {
        ".read": "auth.uid == $uid",
        ".write": "auth.uid == $uid"
      }
    }
  }
}

有了这个,每个用户只能读写自己的数据。

请记住Firebase rules are not filters。使用上面的结构,没有用户可以查询/UsersDB,因为没有人在那里有读取权限。