Validation 验证Firebase中的$Location

Validation 验证Firebase中的$Location,validation,firebase,firebase-security,Validation,Firebase,Firebase Security,我正在尝试对firebase应用程序中的传入数据进行验证。我的结构在底部。为了清晰起见,我删除了现有的验证规则-但是我们可以假设在根规则级别允许读写 $categoryid将如下所示: 1234: {1:{...}, 2:{...}, 3:{...}} 我想确保$categoryid(在上面的示例中是1234)是数字的-但是规则“.validate:“$categoryid.isNumeric()”会导致“无此方法或属性”错误 我可以检查类别中的data.child($categoryid),

我正在尝试对firebase应用程序中的传入数据进行验证。我的结构在底部。为了清晰起见,我删除了现有的验证规则-但是我们可以假设在根
规则
级别允许读写

$categoryid
将如下所示:

1234: {1:{...}, 2:{...}, 3:{...}}
我想确保
$categoryid
(在上面的示例中是
1234
)是数字的-但是规则
“.validate:“$categoryid.isNumeric()”
会导致“无此方法或属性”错误

我可以检查
类别中的
data.child($categoryid)
,但是该变量在该级别不存在,并导致“未知变量”错误

我肯定我错过了一个技巧

{
  "rules": {   
    "categories": {
      "$categoryid": {
        "$itemid": {
          "members": {
            "$id": {

            }
          }
        }
      }
    }
  }
}
目前没有很好的方法可以做到这一点,但有一种方法是将
$categoryId
存储在一个字段中,然后检查该字段是否为数字

使用这些安全规则:

{
  "rules": {   
    "categories": {
      "$categoryid": {
        ".validate": "'' + newData.child('meta/id') === $categoryId && newData.child('meta/id').isNumber()"
        "meta": {},
        "items": {
          "$itemid": {
            "members": {
              "$id": {

              }
            }
          }
        }
      }
    }
  }
}
然后,我们可以通过运行以下命令创建新类别:

categoriesRef.child(1234).set({meta: {id: 1234}});

这些规则将检查a)
$categoryId
是否匹配
$categoryId/meta/id
,并且
$categoryId/meta/id
是一个数字。

要进行此验证,可以使用RegEx
/^[0-9]+$/

{
   "rules": {   
    "categories": {
     "$categoryid": {
        .validate": "$categoryid.matches(/^[0-9]+$/)"
       "$itemid": {
         "members": {
           "$id": {

           }
         }
      }
     }
  }
 }
}