使用firebase数据库规则防止负值

使用firebase数据库规则防止负值,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我正在尝试使用firebase数据库规则来防止出现负值 { "rules": { "products": { ".read": true, ".write": "auth != null", ".indexOn": ["subgroup", "group", "visibility"], ".validate": "newData.child('quantity').val() >= 0" } } 但是,使用

我正在尝试使用firebase数据库规则来防止出现负值

{
"rules": {
    "products": {
        ".read": true,
        ".write": "auth != null",
        ".indexOn": ["subgroup", "group", "visibility"],
        ".validate": "newData.child('quantity').val() >= 0"
    }
}
但是,使用模拟器测试规则时,我总是看到验证规则上的写入被拒绝:

".validate": "newData.child('quantity').val() >= 0"
我正在使用:

location: /products/-KQ1qLkeI3gefuGSFIL_

我使用的是经过身份验证的用户

知道这是怎么回事吗

谢谢

==== 更新:

将规则更改为以下内容没有帮助:

"products": {
        "$product": {
        ".read": true,
        ".write": "auth != null",
        ".validate": "newData.child('quantity').val() >= 0",
        ".indexOn": ["subgroup", "group", "visibility"]
      }
    }, 
此外,DB设计:

DBRoot
    products
        -KQ1nPkLeqiTMzEzhrfW
            description:"Limited Edition"
            quantity: 5
            ...

您的验证规则在
/products
上,但您正在写入
/products/[autoid]
。尝试这样修改规则:

{
  "rules": {
    "products": {
       "$pid": {
         ".read": true,
         ".write": "auth != null",
         ".indexOn": ["subgroup", "group", "visibility"],
         ".validate": "newData.child('quantity').val() >= 0"
       }
    }
  }
}

你能试着直接向products而不是/products/-KQ1qLkeI3gefuGSFIL_uu写吗?嗯,这很奇怪。我用截图编辑了我的答案,显示它对我有用。你所做的一定有点不同。我能看看你的数据库设计吗@“我不知道你的意思,”阿桑。你说你使用模拟器来测试规则,我模拟了你正在做的事情,然后修改了它,这样模拟就会通过。我并没有在真实的数据库上运行它,只是模拟规则。它们起作用了。啊哈,我明白了。我测试的json数据在quantity的数值周围有引号,并且假设它是一个字符串!谢谢你的帮助@dburgesah-ha,那就够了!没问题,很高兴你明白了!
{
  "rules": {
    "products": {
       "$pid": {
         ".read": true,
         ".write": "auth != null",
         ".indexOn": ["subgroup", "group", "visibility"],
         ".validate": "newData.child('quantity').val() >= 0"
       }
    }
  }
}