允许字段但在firebase规则和验证中没有义务

时间:2016-12-24 22:16:28

标签: validation firebase firebase-realtime-database firebase-security

我想知道如何才允许现有或新对象中的某些新字段,但没有义务始终拥有所有这些字段。

例如,我想验证产品对象 我允许字段,如名称,大小,价格,高度,宽度,没有其他未列出的字段,但同时对象是有效的,只有一些字段。

".validate": "newData.hasChildren(['name', 'size','price', 'height', 'width',])"

我认为所有领域都是有义务的。因此,没有高度或宽度的新产品将无效。但我希望它们仍然有效,但不允许有人发明根本没有列出的新字段。

这也需要与现有产品和新产品一起使用。 提前感谢您的提示。

1 个答案:

答案 0 :(得分:1)

要仅允许所需的字段,请使用wildcard location(以$开头的规则)。这将匹配您已指定的任何路径。

来自docs ...

  

动态$变量也可以与常量并行使用   路径名称。在这个例子中,我们使用$ other变量来   声明一个.validate规则,确保窗口小部件没有子节点   标题和颜色以外的东西。任何会导致额外的写入   被创造的孩子会失败。

{
  "rules": {
    "widget": {
      // a widget can have a title or color attribute
      "title": { ".validate": true },
      "color": { ".validate": true },

      // but no other child paths are allowed
      // in this case, $other means any key excluding "title" and "color"
      "$other": { ".validate": false }
    }
  }
}

至于删除所有匹配规则的义务,您可以在上面的示例中执行此操作。您也可以使用OR作为验证规则的一部分:

".validate": "newData.hasChild('name') || newData.hasChild('size') || newData.hasChild('price')"