我正在尝试对传入数据进行一些验证到我的firebase应用程序中。我的结构在底部。为清楚起见,我已删除了现有的验证规则 - 但我们可以假设在rules
级别允许读取和写入。
$categoryid
看起来像这样:
1234: {1:{...}, 2:{...}, 3:{...}}
我想确保$categoryid
(上例中的1234
)是数字 - 但规则".validate": "$categoryid.isNumeric()"
会导致“没有此类方法或属性”错误。
我可以在data.child($categoryid)
中检查categories
,但该级别的变量不存在,并导致“未知变量”错误。
我确定我在这里错过了一个技巧......
{
"rules": {
"categories": {
"$categoryid": {
"$itemid": {
"members": {
"$id": {
}
}
}
}
}
}
}
答案 0 :(得分:2)
目前没有良好的方法可以做到这一点,但有一个hacky工作涉及将$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
是否为数字。
答案 1 :(得分:0)
要进行此验证,您可以使用RegEx /^[0-9]+$/
{
"rules": {
"categories": {
"$categoryid": {
.validate": "$categoryid.matches(/^[0-9]+$/)"
"$itemid": {
"members": {
"$id": {
}
}
}
}
}
}
}