android - 如何使 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
但结果是一样的。
解决方案
以下是适用于您的变量的规则:
"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)"
}
您正在将规则应用于父级而不是您需要的实际变量。试试这个,希望它会起作用。
推荐阅读
- java - 如何从 docker 容器中的 InetAddress.getLocalHost().getHostName() 返回“localhost”
- dart - 在 Dart 中测试代码生成时出错:生成器无法写入资产
- python - python比较两个文本文件并将输出打印到另一个文件
- pygobject - 拥有与 Gtk.TreeView 中默认拖动图标相同颜色和字体设置的拖动图标
- ruby-on-rails - 我可以将自己的随机作业 ID 分配给 Sidekiq 吗?
- c# - BlockingCollection - 让消费者等待
- vhdl - 一个包中的 VHDL 两种类型声明会产生错误
- javascript - HandleKeyPress 无法识别向下箭头
- python - Plotly:如何在 x 轴上仅绘制月份和日期?(忽略年份)
- javascript - 您可以在 Google Script 中为 array.forEach 添加标签吗?