【发布时间】:2016-12-29 04:20:24
【问题描述】:
也许我从 SQL 的角度处理这个问题太多了,但是我在理解如何正确限制应该允许哪些子节点填充节点时遇到了麻烦。
假设我想记录具有任意名称的产品。每个产品都必须包含price,但不允许有其他任何内容。
我的幼稚方法是向要求 newData 包含 price 子节点的产品添加 .validate 规则,明确授予对 price 节点的写访问权限,然后删除所有访问 $other 节点(有点像switch 语句中的默认子句):
{
"rules": {
"$product": {
".read": true,
".write": true,
".validate": "newData.hasChildren(['price'])",
"price": {
".write": true,
".validate": "newData.isNumber()"
},
"$other": {
".read.": false,
".write": false,
}
}
}
}
这不起作用。使用{"price": 1234, "foo": "bar"} 添加新产品仍将被接受。 如果我向 (不知何故,我做错了。)$other 添加".validate": false 规则,则不会接受任何内容(例如,不允许{"price": 1234})。
有什么方法可以实现类似于我在这里尝试做的事情吗?如果不是,那么在 Firebase 中限制数据结构的正确方法是什么?我应该这样做吗?如果我不这样做,什么会阻止用户用垃圾填充我的数据库?
【问题讨论】:
-
我不确定我是否理解为什么
"$other": { ".validate": false }不是您想要的。但是,不管这一点,您是否知道一旦授予权限就不能撤销?那么$product下的".write": true意味着$other下的".write": false被忽略了吗? -
@cartant 我更新了问题以澄清为什么验证不起作用。
标签: firebase firebase-realtime-database firebase-security