Làm cách nào để thực thi số lượng tối đa con của một nút bằng quy tắc bảo mật?Làm cách nào để thực thi số lượng tối đa trẻ em trong một nút?
/bar/customers/$customer/drinks_ordered
Không được có quá mười lăm trẻ em.
Làm cách nào để thực thi số lượng tối đa con của một nút bằng quy tắc bảo mật?Làm cách nào để thực thi số lượng tối đa trẻ em trong một nút?
/bar/customers/$customer/drinks_ordered
Không được có quá mười lăm trẻ em.
Có vẻ như bạn có thể sử dụng id số cho đồ uống được đặt hàng và sau đó thử một cái gì đó như thế này; nó sẽ thất bại kể từ ID là một chuỗi:
"$customer_id": {
"drinks_ordered": {
"$drink_id": {
".validate": "$drink_id > 0 && $drink_id < 16" // error
}
}
}
Thay vào đó, bạn có thể sử dụng một bộ đếm và xác thực truy cập được 1-15, và sau đó xác nhận các thức uống ID phù hợp với truy cập.
"$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"
}
}
}
Đương nhiên, thức uống của bạn sẽ trông giống như thế này:
/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
Bây giờ trước khi một khách hàng có thể thêm ly nữa, họ sẽ phải thiết lập bộ đếm đến 4 (đó là điều duy nhất nó có thể được đặt thành) và sau đó thêm đồ uống có cùng ID đó.
Vòng xoay nhỏ, nhưng nó thực hiện công việc:)
Tôi cũng đã thử ví dụ đầu tiên. Sẽ rất thuận tiện khi được hỗ trợ. Phương thức truy cập thông minh! – abrkn
Tôi đấu tranh với điều này bởi vì tôi đã nhận được một lỗi về '.val' không hợp lệ. Vấn đề là với mẫu xác nhận. Nên là: '" .validate ":" root.child ('/ bar/customers /' + $ customer_id + '/ counter'). Val() + '' == $ drink_id "', phải không? – Justin
Có vẻ đúng, Justin. Cảm ơn! – Kato