如何制定Firebase数据库规则以仅允许增量10

时间:2018-08-27 15:07:20

标签: android firebase firebase-realtime-database

我的用户将数据库中的值增加10。我试图从文档中复制确切的示例,但是我仍然得到

  

“模拟写入被拒绝”

在测试控制台中。

这是我的规则:

{
"rules": {
"my-app": {
  "myapp": {
    ".read": "auth != null",
    ".write": "auth != null && newData.exists() && newData.val() === data.val() + 1",
        // Only authenticated users can read and write
                // and Prevents only Delete
    "totalbyallusers": {
            ".validate": "newData.isNumber()"
    },
  }
}
}
}

如果我删除了newData.val() === data.val() + 1,那么它将起作用。我也曾尝试将newData.val() === data.val() + 1移至“全部用户”,但无济于事。基本上,我希望仅当数据递增10时才更新数据。或者,不太可能的是,如果不可能,则可以以零结尾进行验证。我该怎么办?

位置设置为/my-app/myapp/,数据为:

{
  "totalbyallusers" : 230
}

我还尝试过将位置更改为/my-app/myapp/totalbyallusers,但结果是相同的。

2 个答案:

答案 0 :(得分:0)

以下是适用于您的变量的规则:

"totalbyallusers": {
      ".validate": "newData.isNumber()",
      ".read": "auth != null",
      ".write": "auth != null && (newData.val() != null && data.val() != null && newData.val() == data.val() + 10 || data.val() == null && newData.val() == 10)"
    }

您正在将规则应用于父级,而不是所需的实际变量。希望可以尝试一下。

答案 1 :(得分:0)

好,所以我发现我使用“ my-app”作为最上层的父项,而“ my-app”是项目名称,并显示在Firebase的“数据”选项卡中,但未包含在实际中JSON。因此,我将其注释掉,并使用了相同的+10技术,这一次它起作用了!

谢谢所有为我提供帮助的用户。这是有效的代码:

{
"rules": {
//    "my-app": {
  "myapp": {
    ".read": "auth != null",
    ".write": "auth != null",
        // Only authenticated users can read and write
    "totalbyallusers": {
                ".validate": "newData.val() === data.val() + 10"
    }, // newData.val() % 10 === 0 // this also works but is not very safe.
  }
//    }
}
}