Firebase 安全 - 如何停止覆盖

Firebase security - how to stop overwriting

这是我的数据结构:

{
   "items" : {
      "item0" : {
         "uniqueID" : 5,
         "uniqueID" : 31,
         "uniqueID" : 88
      },
      "item1" : {
         "uniqueID" : 22,
         "uniqueID" : 3
      }
   }
}

我希望用户能够:

1-创建一个新项目

2-创建一个新的uniqueID(条目中的条目)

我想阻止用户:

3-删除任何内容

4-创建上述以外的任何内容

这是我的错误尝试:

{
    "rules": {
        ".read": true,
        ".write": false,
        "items": {
          ".write": "!data.exists()"
        }
    }
}

我相信 ".write": false 应该完成任务 3 和 4,而 ".write": "!data.exists()" 应该完成任务 1 和 2,但是这个解决方案阻止了任何数据被写入数据库

应该失败的写入操作:

var killItem0 = {};
killItem0['item0'] = 'all item 0 entries are now replaced by this text';
REF.child('items/').update(killItem0); //this replaces all data held by item0

我认为这样的事情应该可行:

{
"rules": {
  ".read": true,
  "items": {
      "$itemID": {
          "$uniqueID": {
             //check if data is already there and new data in a number (going off your example data for the number part)
             ".write": "!data.exists() && newData.isNumber()"
            }
        }
    }
}
}