Firebase数据库规则仅允许一条记录

时间:2017-11-25 11:42:21

标签: firebase firebase-realtime-database

是否有Firebase规则,以便我可以确保某个表中可能只存在一条记录,例如。

enter image description here

正在进行时有记录。无法添加新的。

似乎没有firebase的

count()和length()。

3 个答案:

答案 0 :(得分:2)

可以使用安全规则执行您想要的操作。

由于您对最大子女数量的限制为1,因此您可以利用没有子女的钥匙不存在的事实。

如果你使用这样的规则:

{
  "rules": {
    "ongoing": {
      "$key": {
        ".read": "auth != null",
        ".write": "auth != null && ((newData.exists() && (!data.parent().exists() || data.exists())) || !newData.exists())"
      }
    }
  }
}

允许写入:

  • 如果正在添加子项并且ongoing键不存在;或
  • 如果孩子正在更新;或
  • 如果孩子被移除。

该规则将阻止添加另一个子项(如果已存在)(因为ongoing键已存在)。

答案 1 :(得分:1)

这可能不是您想要的,但确实提供了解决方案:

更改您的结构
ongoing
    child_count: 1
    child_0
       id: "some id"

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null",
    "ongoing": {
        ".validate": "root.child('ongoing').child('child_count').val() < 1"
    }
  }
}

然后是规则

ongoing
   child_count: 0

最初创建正在进行的节点时,请按照

创建它
{{1}}

然后在添加节点时,将child_count更改为1.从此处将再次尝试添加或修改正在进行的节点。

答案 2 :(得分:0)

您无法将此表达为验证规则。您可以做的是使用云功能来表达接受或拒绝基于现有数据的更改的逻辑。您的客户端代码需要通过写入数据库的不同部分或HTTPS函数来调用此函数。