【问题标题】:Firebase security - how to stop overwritingFirebase 安全性 - 如何停止覆盖
【发布时间】:2016-04-06 04:01:21
【问题描述】:

这是我的数据结构:

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

我希望用户能够:

1-创建一个新项目

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

我想阻止用户:

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

【问题讨论】:

  • 你能展示一些成功但应该被阻止的写操作吗?
  • 更新了!,看原问题
  • 您当前的写入规则适用于整个 items 节点,因此如果任何数据已经存在,您现在无法执行任何操作。您想要的是更深入并为唯一 ID 制定规则。

标签: json firebase firebase-security firebase-realtime-database


【解决方案1】:

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

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

【讨论】:

  • 我想你现在可能有太多级别了。只是/items/$itemid 不是吗?
  • 嘿,不错的答案!我发现它几乎是正确的,我需要添加 ".write":"!data.exists()" 作为 "$itemID" 中的第二个条目以允许添加新项目#。
猜你喜欢
  • 2015-01-18
  • 2015-02-03
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
  • 2022-06-11
  • 1970-01-01
  • 2022-01-12
  • 2020-07-16
相关资源
最近更新 更多