Firebase实时数据库安全规则中是否有for循环?

Firebase实时数据库安全规则中是否有for循环?,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我浏览了许多网站和文档,其中包含有关安全规则以及如何部署这些规则的信息。但有一件事我找不到,那就是安全规则中的“for循环”。 所以,我有这样一个例子,有n个带z选项的问题,n存储在数据库中的另一个变量n中,但为了确保答案键没有被篡改,或者如果出现任何错误,必须对其进行验证 {othervalue:“x”,答案:[1,2,3,4,5]} 我想验证它是否有n个值,以及所有值是否都小于z。我如何才能?在Firebase的安全规则中无法循环数据,因为这将导致潜在的无限运行时间 典型的解决方案是更改数据

我浏览了许多网站和文档,其中包含有关安全规则以及如何部署这些规则的信息。但有一件事我找不到,那就是安全规则中的“for循环”。
所以,我有这样一个例子,有n个带z选项的问题,n存储在数据库中的另一个变量n中,但为了确保答案键没有被篡改,或者如果出现任何错误,必须对其进行验证

{othervalue:“x”,答案:[1,2,3,4,5]}


我想验证它是否有n个值,以及所有值是否都小于z。我如何才能?

在Firebase的安全规则中无法循环数据,因为这将导致潜在的无限运行时间

典型的解决方案是更改数据模型,以允许安全规则执行直接查找,或在不同时刻执行数据验证

例如:要验证答案是否小于某个值,可以验证各个值:

{
  "rules": {
    "answer": {
      "$answer": {
        ".validate": "newData.isNumber() && newData.val() < 42"
      }
    }
  }
}
{
“规则”:{
“答复”:{
“$answer”:{
.validate:“newData.isNumber()&&newData.val()<42”
}
}
}
}

我最近想到的一个验证数组长度的技巧是检查特定索引,不允许其他任何操作:

{
  "rules": {
    "answer": {
      "0": { ".validate": "newData.isNumber() && newData.val() < 42" }, 
      "1": { ".validate": "newData.isNumber() && newData.val() < 42" && newData.parent().child('0').exists() }, 
      "2": { ".validate": "newData.isNumber() && newData.val() < 42" && newData.parent().child('1').exists() }, 
      "3": { ".validate": "newData.isNumber() && newData.val() < 42" && newData.parent().child('2').exists() }, 
      "4": { ".validate": "newData.isNumber() && newData.val() < 42" && newData.parent().child('3').exists() }, 
      "$other": { ".validate": false }
    }
  }
}
{
“规则”:{
“答复”:{
“0”:{.validate”:“newData.isNumber()&&newData.val()<42”,
“1”:{.validate”:“newData.isNumber()&&newData.val()<42”&&newData.parent().child('0')。exists()},
“2”:“{.validate”:“newData.isNumber()&&newData.val()<42”&&newData.parent().child('1')。exists()”,
“3”:“{.validate”:“newData.isNumber()&&newData.val()<42”&&newData.parent().child('2')。exists()”,
“4”:“{.validate”:“newData.isNumber()&&newData.val()<42”&&newData.parent().child('3')。exists()”,
“$other”:{.validate”:false}
}
}
}
注意:我还没有在实践中测试这些规则,因此您的里程数可能会有所不同


因此,在最后这些规则中,我们允许使用5个元素的数组(如您的示例中所示),方法是验证只有那些特定的键存在(并且它们是连续的)。

索引的数量没有这样定义?在这种情况下,我认为没有办法通过安全规则强制执行,您必须考虑另一种方法(例如在服务器上或在云函数中运行受信任的代码)。