2014-03-31 39 views
1

我正在尝试对传入的数据进行一些验证,以导入我的Firebase应用。我的结构在底部。为了清晰起见,我已经删除了现有的验证规则 - 但是我们可以假设在根rules级别允许读取和写入。

$categoryid会是这个样子:

1234: {1:{...}, 2:{...}, 3:{...}} 

我想确保$categoryid(在上面的例子中1234)是数字 - 但是规则".validate": "$categoryid.isNumeric()"导致一个“没有这样的方法或属性”错误。

我可以categories检查data.child($categoryid),但变量不在“未知变量”错误水平和结果存在。

我敢肯定,我在这里失踪了一招......

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

      } 
      } 
     } 
     } 
    } 
    } 
} 

回答

2

目前还没有办法做到这一点,但有一个哈克变通涉及存储在$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}}); 

这些规则将检查一)$categoryId比赛$categoryId/meta/id$categoryId/meta/id是多少。

0

要做到这一点的验证,您可以使用正则表达式/^[0-9]+$/

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

      } 
     } 
     } 
    } 
    } 
} 
}