1
我正在研究一个维护交易分类账的简单应用程序。如何使用Firebase保护简单分类帐类型应用程序?
我的数据是这样的:
{
"payments": {
"user1": {
"payment1": {
"amount": 2,
"timestamp": 1475303826
}
}
},
"purchases": {
"user1": {
"purchase1": {
"amount": 0.25
"timestamp": 1475303735
},
"purchase2": {
"amount": 1.99
"timestamp": 1475303792
}
}
},
"users": {
"user1": {
"balance": -0.24
}
}
}
每次我加入付款,我想用户的余额增加,而当我添加了一个购买,我想余额减少。
有没有办法设置Firebase规则,以便用户的余额总是等于其购买和付款的总和?
编辑
继弗兰克面包车Puffelen的答案,我设法创建这些规则:
"purchases": {
"$uid": {
"$pid": {
".validate": "!data.exists() && (newData.parent().parent().parent().child('users/'+$uid+'/balance').val() == root.child('users/'+$uid+'/balance').val() - newData.child('amount').val())"
}
}
},
"payments": {
"$uid": {
"$pid": {
".validate": "!data.exists() && (newData.parent().parent().parent().child('users/'+$uid+'/balance').val() == root.child('users/'+$uid+'/balance').val() + newData.child('amount').val())"
}
}
}
这些确保任何新的购买或支付是伴随着匹配更新用户的平衡。
我现在试图想出规则,以防止在未添加购买或付款的情况下更改余额。我有这样的想法:为用户的余额添加一条规则,以验证在更新期间,只有一次新的购买或付款,但我认为没有办法使用规则DSL对节点的子项进行计数。
谢谢,这帮助我解决了一半问题。我用我的进步编辑了我的问题。 –