因此,我正在向Firebase实时数据库添加规则,我需要它检查要添加的newData值是否超过一定数量,在这种情况下,这是用户在其uid之下的余额。因此,如果用户的“余额”超过了要添加的“价格”数据,则写入数据。
这是我的数据库的样子:
{
"orders" : {
"-Lfi6kSDLOmcvGgfiWjX" : {
"amount" : "100",
"price" : "0.01",
},
},
"users" : {
"GNzSciHRZAgZgIrhqIvR2vzVugj2" : {
"balance" : "100",
}
}
}
这是我用来添加到数据库中的代码:
firebase.database().ref('orders').push().set ({
price: '10',
amount: '1'
});
这是规则:
"users": {
".read": true,
".write": true
},
"orders": {
".read": true,
".write": "root.child('users').child(auth.uid).child('balance').val() > '0' && root.child('users').child(auth.uid).child('balance').val() > newData.child('price').val()"
}
一切正常,直到我添加newData.child('price').val()
规则,这是规则的使用方式吗?
答案 0 :(得分:0)
由于您将值存储为字符串,因此Firebase将在其上使用字典顺序和字符串比较运算符。我高度建议将数字值存储为实际数字,这样可以简化规则的推理过程:
JSON:
{
"orders" : {
"-Lfi6kSDLOmcvGgfiWjX" : {
"amount" : 100,
"price" : 0.01,
},
},
"users" : {
"GNzSciHRZAgZgIrhqIvR2vzVugj2" : {
"balance" : 100,
}
}
}
JavaScript代码:
firebase.database().ref('orders').push().set ({
price: 10,
amount: 1
});
规则:
"orders": {
".read": true,
".write": "
root.child('users').child(auth.uid).child('balance').val() > 0 &&
root.child('users').child(auth.uid).child('balance').val() >= newData.child('price').val()"
}
还要注意在最后一个表达式中从>
到>=
的更改,因为您可能还想在用户有足够的钱时允许写操作。
更新
除此之外,您的规则本身是在orders
上声明的,应该在特定顺序的下一层声明它们。
所以:
"orders": {
"$orderId": {
".read": true,
".write": "
root.child('users').child(auth.uid).child('balance').val() > 0 &&
root.child('users').child(auth.uid).child('balance').val() >= newData.child('price').val()"
}
}