【问题标题】:Firebase Make Existing Data Unmodifiable but can write and read new dataFirebase 使现有数据不可修改,但可以写入和读取新数据
【发布时间】:2016-10-07 22:45:23
【问题描述】:

我开始在我的新项目中使用 Firebase,该项目需要大量数据。如何设置规则以便:

  • 程序可以读取所有数据
  • 程序可以写入新数据
  • 程序无法修改或删除现有数据

这就是我所拥有的:

{
  "rules": {
    "users":{
      ".read": true,
      ".write": "!data.exists() && newData.exists()",
    }
  }
}

我的数据结构如下:

(name of project) -> users -> (user ID) -> data

我现在遇到的问题是每次写入都被阻止,无论新数据是否存在。我需要改变什么来解决这个问题?

【问题讨论】:

  • 我认为导致问题的第一个错误是您没有授予写入权限您当前的.write逻辑/架构应该在 .validate.write 您应该根据您的需要简单地授予访问权限,即对于未经授权的访问或某些授权访问是正确的。要对整个规则本身进行更好的评论,请等待 FrankvP 看看。
  • 这些规则乍一看还不错。能否给出写操作失败的代码?

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


【解决方案1】:

您忘记在规则中添加用户 ID。现在,在第一个用户添加了他的数据之后,没有人能够写。要解决此问题,只需在规则中为用户 ID 添加 wildcard path,如下所示:

{
  "rules": {
    "users":{
      ".read": true,
      "$userid":{
        ".write": "!data.exists() && newData.exists()"
      }
    }
  }
}

【讨论】:

  • 因为每个用户都在自己的节点下写,而不是直接在用户节点下。所以 $userid 是代表不同用户节点的通配符。
猜你喜欢
  • 2015-10-22
  • 1970-01-01
  • 2021-10-18
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多