代码之家  ›  专栏  ›  技术社区  ›  Usman

如何使Firebase数据库规则只允许增量10

  •  0
  • Usman  · 技术社区  · 6 年前

    我的用户将数据库中的值增加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 那就行了。我也试过搬家 新数据。val()==数据。val()+1 对“totalbyallusers”来说,但没有用。基本上,我希望只有当数据增加10时,数据才会被更新。或者,不太可取的是,如果不可能,则可以验证它是否以零结尾。我能做什么?

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

    {
      "totalbyallusers" : 230
    }
    

    我也试着把地点改成 /my-app/myapp/totalbyallusers 但结果是一样的。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Umar Hussain    6 年前

    以下是应用于变量的规则:

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

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

        2
  •  0
  •   Usman    6 年前

    好的,所以我发现我使用“我的应用程序”作为最顶层的父项,而“我的应用程序”是项目名称,出现在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.
      }
    //    }
    }
    }