Firebase规则 - 多个默认值

时间:2015-11-13 16:33:16

标签: firebase firebase-security

我的firebase中有一个父母作为“客户”。然后是一个“发票”的孩子,然后是发票上的孩子

'clients' {
    'uid' {
       'invoices' {
          'number': '1003 //etc...
          'payments' {

           }
           'history' {

           }
           'discussion' {

           }
       }
    }
 }

我试图只允许客户写入付款,历史记录和讨论。但是当我执行以下操作时,我在Firebase仪表板规则部分中收到错误Cannot have multiple default rules ('$payments' and '$history').

"clients": {
      ".write" : "root.child('roles').child(auth.uid).child('level').val() == 4",
      ".indexOn" : "number",
      "$estimates": {
        "$discussion": {
          ".write": "root.child('roles').child(auth.uid).child('level').val() == 2"
        }
      },
      "$invoices": {
        "$payments": {
          ".write": "root.child('roles').child(auth.uid).child('level').val() == 2"
        },
        "$history": {
          ".write": "root.child('roles').child(auth.uid).child('level').val() == 2" 
        },
        "$discussion": {
          ".write": "root.child('roles').child(auth.uid).child('level').val() == 2"
        }
      }
    },

那么编写这些规则的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

您似乎在规则中缺少JSON树中的某些级别。

"clients": {
   "$clientid": {
      ".write" : "root.child('roles').child(auth.uid).child('level').val() == 4",
      "invoices": {
         ".indexOn" : "number",
         "$invoiceid": {
            "payments": {
               ".write": "root.child('roles').child(auth.uid).child('level').val() == 2"
            },
            "history": {
               ".write": "root.child('roles').child(auth.uid).child('level').val() == 2" 
            },
            "discussion": {
               ".write": "root.child('roles').child(auth.uid).child('level').val() == 2"
            }
         }
      },

您应该只对需要应用于节点下所有其他非匹配子项的规则使用$变量。

因此,如果您将所有付款作为payments节点的子节点并且需要特定的验证规则,则可以:

            "payments": {
               ".write": "root.child('roles').child(auth.uid).child('level').val() == 2",
               "$paymentid": {
                  ".validate": "..."
               }
            },