【问题标题】:Using firebase database rules to prevent negative values使用 firebase 数据库规则来防止负值
【发布时间】:2016-09-08 06:12:36
【问题描述】:

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

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

但是,使用模拟器测试规则时,我总是看到 write denied on validate rule:

".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
            ...

【问题讨论】:

  • 您可以尝试直接写入产品而不是 /products/-KQ1qLkeI3gefuGSFIL_ 吗?

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


【解决方案1】:

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

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

【讨论】:

  • 嗯,这很奇怪。我用屏幕截图编辑了我的答案,显示它对我有用。你所做的事情肯定有一些不同。
  • 我可以看看你的数据库设计吗? @dbburgess
  • 我不确定你的意思,@Ahsan。您说您使用模拟器来测试规则,我准确地模拟了您在做什么,然后对其进行了修改,以便模拟通过。我实际上并没有针对真实数据库运行它,只是模拟规则。他们工作。
  • 啊哈,我明白了。我正在测试的 json 数据在数量的数值周围有引号,并假设它是一个字符串!感谢您的帮助@dbburgess
  • 啊哈,这样就行了!没问题,很高兴你知道了!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-03
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 2021-08-13
  • 1970-01-01
  • 2020-02-24
相关资源
最近更新 更多