我的firebase数据库中有一个user
对象,其中包含一些敏感日期(例如电子邮件)。
对于需要获取用户信息(不是当前用户)的情况,如何防止返回此数据? (例如,如果用户可以查看其他用户的个人资料数据。)
选项
使用Firebase security rules:此选项的问题是,在尝试检索用户对象时会抛出大量错误(即使我只想“隐藏”该用户对象下的敏感子值)。
重构我的数据,以便公共和私有数据位于两个不同的路径中。
选项#2对我来说似乎是可行的,但我想在进行重大架构改造之前检查一下,没有更简单的解决方案?
答案 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
}
}
}
}
}