如何通过数据库规则仅从数据中更新某些字段?

时间:2016-06-27 16:26:40

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

我的数据库:

{ "user" :
    "$userID": {
        "name" : "Anon",
        "age" : 99
    }
}

如果客户端意外发送了错误数据但有一些有效数据,是否有办法仅使用有效数据更新服务器?

例如,

user1.updateChildValues(["name" : "John Snow", "age" : 30, "BADKEY" : "BAD DATA"])

我希望上述更新尝试起作用,但只能使用数据库安全规则在上述情况下使用["name" : "John Snow", "age" : 30]更新数据库。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

听起来您想在数据结构上强制执行架构。您可以通过验证属性(并拒绝不匹配的属性)在安全规则中执行此操作:

{ "user" :
    "$userID": {
        ".validate": "newData.hasChildren('name', 'age')",
        "name": {
            ".validate": "newData.isString()"
        },
        "age" : {
            ".validate": "newData.isNumber()"
        },
        "$other": {
            ".validate": false
        }
    }
}

这里的$other规则匹配任何未被更明确的规则匹配的子项,然后拒绝它们。