【问题标题】:Firebase real-time database rules granularityFirebase 实时数据库规则粒度
【发布时间】:2021-02-11 11:36:27
【问题描述】:
我从文档中知道 Firebase 的实时数据库有一组规则类型,例如 .write 和 .read
我的问题是:更具体的需求呢?
比如,如果我不仅要授予用户他不能写/不能写的权限,而且他可以写来创建、写来编辑或写来删除怎么办?
FRB规则可以区分这些不同的类型以便让我对其进行监管吗?
【问题讨论】:
标签:
firebase
firebase-realtime-database
firebase-security
【解决方案1】:
是的,您可以这样做。在实时数据库中,您可以使用.validate 规则来确定是否要允许操作。因此,如果您想允许用户写入,但只允许删除(例如),您可以执行以下操作:
{
"rules": {
"posts": {
"$postId": {
// Anyone can read
".read": true,
// Some write condition
".write": ...,
// User can only write to create or delete, not edit
".validate": "!data.exists() || !newData.exists()"
}
}
}
}
在这种情况下,如果!data.exists() - 即如果操作运行之前的数据不存在则创建新的 - 或者如果!newData.exists() - 即删除如果,之后,用户只能写入 RTDB操作后,这条记录中的新数据已经不存在了。
您可以结合这些规则,对您的数据和访问进行非常细粒度的控制。如果您需要 RTDB 安全规则之外的更多访问控制,您可以使用 RTDB 规则锁定数据,并创建 Cloud Functions 以通过服务器端逻辑和处理访问和修改 RTDB。
还可以查看:
https://firebase.google.com/docs/rules/rules-language?authuser=0#rule_constructs