如果我有一个包含以下字段的数据库:
name
email
phone
position
pay
有相当多的帖子展示了如何允许用户允许访问他们的数据,或允许管理员访问其他人的数据,包括他们自己的数据。
问题是,您如何限制 firebase 安全规则中的数据,以允许“员工”只能写入姓名、电子邮件和电话,而管理员可以写入所有字段,包括职位和薪酬。
例如,如果我是一名员工并且我知道 firebase,那么什么可以阻止我为“工资”注入(inject)新的金额以便我可以更改金额?即使认为该字段可能不会显示,我也可以对我的整个记录进行写访问。我想限制对某些字段的写访问。这可能吗?
我的猜测是列出每个字段,例如:
{
"name": ".write...",
"email: ".write...", etc etc
}
或者使用 .validate,但我不确定?
最佳答案
假设所有这些用户都在一些称为用户的子项下,并且每个用户的配置文件都有一个 key ,即他们的 auth.uid
,您可以创建一个规则,用户可以在其中写入名称类别,如果他们的职位被列为 admin
或者 $user_id
是他们自己的用户 ID。这样管理员可以写任何人的名字,用户可以写他们自己的名字。同样,对于 pay
子项,只有 position
等于 admin
的用户才能写入 pay
。这可能看起来像这样:
{
"users": {
"$user_id": {
"name": {
".write": "root.child('users/'+auth.uid+'/position') == 'admin' || $user_id == auth.uid"
},
"pay": {
".write": "root.child('users/'+auth.uid+'/position') == 'admin'"
}
}
}
}
您只需要为 email
、phone
和 position
添加规则。
关于特定字段的 firebase 读/写规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44791087/