数据库结构(消防控制台.数据):
{
"competitors": {
0: {
"name": "Arnold",
"position": 1
},
1: ...
}规则:
{
"rules": {
".read": true,
".write": true,
"competitors": {
"$competitor": {
"position": {
".validate": "newData.isNumber()"
}
}
}
}
}当我试图模拟从控制台模拟器中添加字符串值时,该规则工作正常--据报告违反了该规则。但是,当我真正地将职位的值添加或更改为字符串时(来自Firebase控制台),则将无错误地添加该值。
如何正确设置只允许数字值的验证规则?
更新(基于奥斯曼的评论)
以下可供选择的形式产生了同样的结果:
{
"rules": {
".read": true,
".write": true,
"competitors": {
"$competitor": {
".validate": "newData.child('position').isNumber()"
}
}
}
}发布于 2017-07-05 15:47:45
您需要像这样使用val()来读取这个值:
".validate": "newData.val().isNumber()"发布于 2018-11-24 18:35:40
你已经做对了,但这是个陷阱
如果您直接通过
firebase console编辑数据,则firebase规则将无法工作。相反,尝试使用firebase更新或设置数据,它将引发错误PERMISSION_DENIED。
示例:考虑一个非常简单的db
{
number_only: 3
}非常简单的规则
{
"rules":{
"number_only":{
".write": true,
".validate": "newData.isNumber()"
}
}
}测试它:
firebase.database.ref('number_only').set('str') -将引发错误https://stackoverflow.com/questions/44930043
复制相似问题