如何在firebase实时数据库规则中设置变量
Posted
技术标签:
【中文标题】如何在firebase实时数据库规则中设置变量【英文标题】:How to set a variable in firebase realtime-database rules 【发布时间】:2022-01-05 05:48:15 【问题描述】:所以我的数据库看起来像这样:
我的规则是这样的:
"rules":
".read": true,
".write": true,
"_default_user": <---- this is what I need to change
"cart":
".indexOn": "product/id"
这是我从购物车中删除产品的代码:
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()
)
现在,要从购物车中删除商品,我需要手动将帐户添加到我的规则中,这当然是不可行的。 我基本上需要在所有可能的帐户上都有 indexOn,而无需手动执行所有这些操作。
【问题讨论】:
【参考方案1】:原来我只需要这样做:
"rules":
".read": true,
".write": true,
"$user": // <---
"cart":
".indexOn": "product/id"
只需输入变量,.indexOn 将应用于根中的每个节点(在我的情况下)
https://firebase.google.com/docs/database/security/core-syntax
【讨论】:
以上是关于如何在firebase实时数据库规则中设置变量的主要内容,如果未能解决你的问题,请参考以下文章
我应该如何在 Firebase 实时数据库中设置作为键值类型的 getter 和 setter?
用户扫描二维码以读取和写入特定数据库节点后如何在 Firebase 中设置安全规则
如何在 Flutter Web 项目中设置 Firebase 功能
如果用户长时间没有写入,如何使用 Firebase Cloud Functions 在 Firebase 数据库中设置节点的值?