【问题标题】:firebase read/write rules on specific fields特定字段的firebase读/写规则
【发布时间】:2017-12-01 03:29:12
【问题描述】:

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

name
email
phone
position
pay

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

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

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

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

{
"name": ".write...",
"email: ".write...", etc etc
}

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

【问题讨论】:

    标签: firebase firebase-realtime-database firebase-security


    【解决方案1】:

    假设所有这些用户都属于某个子用户,并且每个用户的个人资料都有一个键是他们的auth.uid,您可以创建一个规则,如果用户的位置被列为@987654323,则用户可以写入名称类别@ 或者如果 $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 添加规则。

    【讨论】:

    • 啊,好吧,这似乎有道理,我会测试一下。谢谢!我的下一个问题是,如果您有多个字段(30+)可以为任何类型的用户编写,该怎么办?您是否必须列出所有具有写入规则的字段,或者它们都可以进入某种数组/一个对象?
    • 为此,您可以在 $user_id 下添加一个 $all 通用规则。请参阅我对几天前给出的这个非常相似的问题的回答:stackoverflow.com/questions/44747851/…
    • 这个小花絮,尤其是 $ 表示子节点然后声明显式字段权限的符号非常有用。从代码更新中拯救了我,能够将单个字段标记为始终可写。 Firebase 非常漂亮,而且总是越来越好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多