特定字段的 firebase 读/写规则

标签 firebase firebase-realtime-database firebase-security

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

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'"
            }

        }
    }
}

您只需要为 emailphoneposition 添加规则。

关于特定字段的 firebase 读/写规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44791087/

相关文章:

node.js - snapshot.ref 不是函数

Firebase 计费 - 终止开关

firebase - 您如何调试 Firestore 安全规则?

java - Firestore 安全规则 : use array_contains to determine authorization

javascript - 为什么我的 img 在我硬编码 src URL 时显示,但在我以编程方式分配它时却不显示?

java - 我正在向 Firestore 数据库输入值,但它们没有进入正确的字段

swift - 如何将 Firebase 数据从 TableView 单元格传递到 View Controller ?

android - Firebase 实时数据库根据查询的值返回 ArrayList 或 HashMap

JavaScript onClick 异步到 firebase 删除文档

firebase - Firestore 规则限制用户只读/写他们的数据