首页 > 解决方案 > 如何使 Firebase 数据库规则只允许 10 的增量

问题描述

我的用户将数据库中的值增加 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到“totalbyallusers”,但无济于事。基本上我希望数据只有在增加 10 时才应该更新。或者,不太理想的是,如果不可能,那么可以验证它是否以零结尾。我能做些什么?

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

{
  "totalbyallusers" : 230
}

我也尝试过将位置更改为,/my-app/myapp/totalbyallusers但结果是一样的。

标签: androidfirebasefirebase-realtime-database

解决方案


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

"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)"
    }

您正在将规则应用于父级而不是您需要的实际变量。试试这个,希望它会起作用。


推荐阅读