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

时间:2016-09-07 16:11:46

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

我正在尝试使用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_

{
   "quantity": 0
}

我正在使用经过身份验证的用户。

有什么想法在这里发生?

感谢。

==== 更新:

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

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

此外,数据库设计:

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

1 个答案:

答案 0 :(得分:1)

您的验证规则位于/products,但您正在写信/products/[autoid]。尝试修改你的规则:

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

Simulated Rules