Así que mi base de datos se ve así:
Y mis reglas se ven así:
{ "rules": { ".read": true, ".write": true, "_default_user":{ <---- this is what I need to change "cart":{ ".indexOn": "product/id" } } } }Este es mi código para eliminar un producto del carrito:
removeFromCart(itemRemoved){ let account = JSON.parse(localStorage.getItem('user')) === null ? '' : JSON.parse(localStorage.getItem('user')).email account == '' ? account = ['_default', ''] : account = /([^@]+)/.exec(account) const cartRef = firebase.database().ref('/' + account[0] + '_user' + '/cart'); // Do I need to change this ^ as well? const itemQuery = cartRef.orderByChild("product/id").equalTo(itemRemoved.id); let itemRef:any = '' itemQuery.get().then((snapshot) => { snapshot.forEach((productSnapshot) => { itemRef = firebase.database().ref('/' + account[0] + '_user' + '/cart' + '/' + productSnapshot.key); }) itemRef.remove() }) }Por ahora, para eliminar un artículo del carrito, necesito agregar manualmente cuentas a mis reglas, lo cual, por supuesto, no es factible. Básicamente, necesito tener indexOn en todas las cuentas posibles sin tener que hacer todo eso manualmente.
Resulta que solo necesito hacer esto:
{ "rules": { ".read": true, ".write": true, "$user":{ // <--- "cart":{ ".indexOn": "product/id" } } } }Simplemente escriba la variable y .indexOn se aplicará a cada nodo en la raíz (en mi caso)
https://firebase.google.com/docs/database/security/core-syntax