5
セキュリティルールを使用してノードの子ノードを最大数に強制するにはどうすればよいですか?ノードに最大数の子を強制するにはどうすればよいですか?
/bar/customers/$customer/drinks_ordered
15人以上の子供を持つべきではありません。
セキュリティルールを使用してノードの子ノードを最大数に強制するにはどうすればよいですか?ノードに最大数の子を強制するにはどうすればよいですか?
/bar/customers/$customer/drinks_ordered
15人以上の子供を持つべきではありません。
注文したドリンクに数字のIDを使用して、このようなことを試してみるといいかもしれません。
"$customer_id": {
"drinks_ordered": {
"$drink_id": {
".validate": "$drink_id > 0 && $drink_id < 16" // error
}
}
}
代わりに、あなたはカウンターを使用して、カウンターを検証1-15であることを、その後、IDカウンタと一致したドリンクを検証することができます:IDが文字列であるので、それは失敗します。クライアントは別の飲み物を追加することができます前に、彼らはそれができる唯一のものである(4にカウンタを設定する必要があります今
/bar/customers/george_thorogood/counter/3
/bar/customers/george_thorogood/drinks_ordered/1/burbon
/bar/customers/george_thorogood/drinks_ordered/2/scotch
/bar/customers/george_thorogood/drinks_ordered/3/beer
:
"$customer_id": {
"counter": {
// counter can only be incremented by 1 each time, must be a number
// and must be <= 15
".validate": "newData.isNumber() && newData.val() > 0 && newData.val() <= 15 && ((!data.exists() && newData.val() === 1) || (newData.val() === data.val()+1))"
},
"drinks_ordered": {
// new record's ID must match the incremented counter
"$drink_id": {
// use .val()+'' because $drink_id is a string and Firebase always uses ===!
".validate": "root.child('bar/customers/'+$customer_id+'/counter').val()+'' == $drink_id"
}
}
}
当然のことながら、あなたの飲み物は、このようになります。 )に設定し、同じIDのドリンクを追加します。
私はまた、最初の例を試みました。それをサポートさせると便利です。 カウンターメソッドは巧妙です! – abrkn
私は '.val'が有効ではないというエラーが出てきたので、私はこれで苦労しました。問題は検証サンプルにありました。 ':validate': "root.child( '/ bar/customers /' + $ customer_id + '/ counter')。val()+ '' == $ drink_id" '、そうですか? – Justin
ルックス、ジャスティン。ありがとう! – Kato