数据库结构(Firebase Console - Data):
{
"competitors": {
0: {
"name": "Arnold",
"position": 1
},
1: ...
}
规则:
{
"rules": {
".read": true,
".write": true,
"competitors": {
"$competitor": {
"position": {
".validate": "newData.isNumber()"
}
}
}
}
}
当我尝试模拟从控制台模拟器添加字符串值时,规则正常 - 报告违反规则。但是当我真正添加或更改位置的值作为字符串(来自Firebase控制台)时,会添加该值而不会出错。
如何正确设置仅允许数字值的验证规则?
更新(基于Oussema的评论)
以下替代形式给出了相同的结果:
{
"rules": {
".read": true,
".write": true,
"competitors": {
"$competitor": {
".validate": "newData.child('position').isNumber()"
}
}
}
}
答案 0 :(得分:0)
您需要使用val()
这样读取值:
".validate": "newData.val().isNumber()"
答案 1 :(得分:0)
如果您直接通过以下方式编辑数据,则Firebase规则将不起作用
firebase console
。而是尝试使用以下命令更新或设置数据 firebase SDK,它应该引发错误PERMISSION_DENIED
示例:考虑一个非常简单的数据库
{
number_only: 3
}
非常简单的规则
{
"rules":{
"number_only":{
".write": true,
".validate": "newData.isNumber()"
}
}
}
测试:
firebase.database.ref('number_only').set('str')
-会引发错误