私はトランザクション元帳を管理する簡単なアプリを開発しています。私のデータは、このようになります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を使用してノードの子供を数える方法はないと思います。
これは私の問題の半分を解決するのに役立ちました。私は自分の進捗状況を編集しました。 –