我的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"
}
}
},
那么编写这些规则的正确方法是什么?
答案 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": "..."
}
},