【发布时间】:2018-09-21 21:40:52
【问题描述】:
我有以下类型的 Firebase 数据库数据:
{ sales:
{ -Axyz: {shop_id: 1, name: item1},
-BqwW: {shop_id: 2, name: item2},
-Cwer: {shop_id: 1, name: item3}
}
}
我正在使用身份验证令牌声明来存储访问级别和 ID。 我希望管理员可以访问所有记录,而店主只能访问他们的记录。
我有以下数据库规则 - 管理员用户可以访问所有记录,而商店用户可以访问他们自己的记录:
{
"rules": {
"sales": {
".read": "auth.token.admin === true"
"$key": {
".read": "auth.token.shop === true && data.child('shop_id').val() === auth.token.shop_id"
}
}
} }
理想情况下,我想查询 /sales/ 表并获取相关记录的列表 - 管理员用户的所有记录和商店用户的一些记录。
firebase.database().ref('sales').on('value', ....
这种方式可以实现吗?
谢谢!
【问题讨论】:
-
您能否编辑问题以包含尝试读取数据但失败的代码?
-
嗨,谢谢,我现在编辑了 Q 以更好地解释我想要实现的目标。
-
您的
"sales": { ".read": "auth.token.admin === true"将向拥有admin声明为true的用户授予读取权限。如果此类用户运行您的代码firebase.database().ref('sales').on('value',则将允许读取。如果此读取被您拒绝,则用户没有正确的声明 -
那么商店用户是否可以从 /sales/ 获取所有“他们的”记录的列表?
-
虽然管理员可以阅读
/sales,但其他用户无法从那里阅读。您可能希望 Firebase 自动过滤您有权访问的子节点,但遗憾的是并非如此。安全规则不会自动过滤数据(请参阅previous questions about this)。因此,虽然每个用户都可以访问他们商店的每个销售节点,但他们无法读取/sales来获取它们的列表。 Query based rules 可能有用,但我不确定
标签: firebase firebase-realtime-database firebase-security