快点,我正试图了解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帐户的管理员。我想考虑创建一个管理控制台类型的软件,这将允许我访问存储的所有数据。如何更改或更新规则以允许管理员登录访问上述数据。我是否会将读取权限更改为任何人(虽然我认为这会在规则中留下漏洞)或者是否有办法声明规则,使我的(管理员)对所有数据具有完全读取权限?
谢谢
答案 0 :(得分:2)
您忽略了Firebase文档的一个非常重要的部分,该文档指定了permissions cascade:
安全和火灾规则从上到下工作
子规则只能为父节点已声明的内容授予额外权限。他们无法撤销读取或写入权限。
由于您的顶级读写规则已允许任何经过身份验证的用户读取/写入所有帐户,因此您无法撤消树中较低的权限。
幸运的是,您的方案中无需授予这些更高级别的权限。
{
"rules": {
"UsersDB": {
"$uid": {
".read": "auth.uid == $uid",
".write": "auth.uid == $uid"
}
}
}
}
有了这个,每个用户只能读写自己的数据。
请记住Firebase rules are not filters。使用上面的结构,没有用户可以查询/UsersDB
,因为没有人在那里有读取权限。