特定字段的 firebase 读/写规则

Mat*_*att 1 firebase firebase-security firebase-realtime-database

如果我有一个包含以下字段的数据库:

name
email
phone
position
pay
Run Code Online (Sandbox Code Playgroud)

有大量帖子展示了如何允许用户访问他们的数据,或允许管理员访问其他人的数据,包括他们自己的数据。

问题是,您如何限制 firebase 安全规则中的数据,以允许“员工”仅写入姓名、电子邮件和电话,而管理员可以写入所有字段,包括职位和薪酬。

例如,如果我是一名员工并且我知道 firebase,有什么可以阻止我为“支付”注入新的金额以便我可以更改金额?即使认为该字段可能不会显示,我也会对我的整个记录​​进行写访问。我想限制对某些字段的写访问。这可能吗?

我的猜测是列出每个字段,例如:

{
"name": ".write...",
"email: ".write...", etc etc
}
Run Code Online (Sandbox Code Playgroud)

或使用 .validate,但我不确定?

Jen*_*son 5

假设所有这些用户都在一些名为 users 的子项下,并且每个用户的个人资料都有一个键,即他们的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'"
            }

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

你只需要添加规则emailphoneposition