关于ios:Firebase安全性和规则

Firebase security and rules

只是个速战速决,我正设法了解Firebase安全协议,并建立了一个名为UsersDB的数据库,该数据库将存储基于auth.uid的详细信息。详细信息为全名,电子邮件,提供者,帐户创建日期,上次登录日期。

我已设置如下规则:

1
2
3
4
5
6
7
8
9
10
11
{
 "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匹配的人读写。

我的问题是我是否正确地做到了?如果没有,我应该如何实现呢?我只希望创建该帐户的人能够对此进行读写操作,而没有其他uid可以访问该信息。

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

谢谢


您正在忽略Firebase文档中非常重要的部分,该部分指定了权限级联:

SECURITY AND FIREBASE RULES WORK FROM THE TOP-DOWN

The child rules can only grant additional privileges to what parent nodes have already declared. They cannot revoke a read or write privilege.

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

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

1
2
3
4
5
6
7
8
9
10
{
 "rules": {
   "UsersDB": {
     "$uid": {
       ".read":"auth.uid == $uid",
       ".write":"auth.uid == $uid"
      }
    }
  }
}

每个用户只能读取和写入自己的数据。

请记住,Firebase规则不是过滤器。使用上述结构,由于没有人在其中读取权限,因此没有用户可以在/UsersDB上进行查询。