【问题标题】:firebase security rule allow write permissions to only some specific fields/properties of my documents [duplicate]firebase 安全规则仅允许对我的文档的某些特定字段/属性的写入权限[重复]
【发布时间】:2019-12-27 14:42:14
【问题描述】:

当有人使用新电话号码注册时,我的用户登录系统将自动在数据库集合中创建一个新文档。

用户文档的创建和更新是通过客户端 JavaScript 完成的,我正在使用 firestore 安全规则来防止基本用户编写或修改 isActivatedisAdmin 等文档属性。它适用于以下规则:

allow write: if request.response.data.isActive==null || request.response.data.isActive == response.data.isActive &&
request.response.data.isAdmin==null || request.response.data.isAdmin == response.data.isAdmin;

但还是有一些黑客很容易在客户端修改dbRef.add()函数,添加{age: "hacker won't tell ya", hackersName: "Naah!", foo: "bar", bar: "foo"}等无用数据。

我希望用户文档只包含属性name, phone_number, isActive, isAdmin, FCMtoken 而没有其他内容。有没有其他人陷入同样的​​麻烦? 以及实现此目的的任何想法?

【问题讨论】:

    标签: firebase permissions google-cloud-firestore firebase-security


    【解决方案1】:

    要断言资源仅具有特定的键列表,您可以使用rules.List#hasOnly(),如果出现不在给定列表中的值,则会评估为 false。

    request.response.data.keys().hasOnly(['name', 'phone_number', 'isActive', 'isAdmin', 'FCMtoken'])
    

    将此与您的其他(固定)限制相结合,得出:

    allow write: if (request.response.data.isActive == null || request.response.data.isActive == response.data.isActive)
                 && (request.response.data.isAdmin == null || request.response.data.isAdmin == response.data.isAdmin)
                 && request.response.data.keys().hasOnly(['name', 'phone_number', 'isActive', 'isAdmin', 'FCMtoken']);
    

    【讨论】:

    • 感谢您提供正确且不混淆的答案的快速响应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-02
    • 2017-10-08
    • 2020-09-18
    • 2020-09-22
    • 2018-06-27
    • 2020-01-28
    • 1970-01-01
    相关资源
    最近更新 更多