按数据键列出的Firebase数据库访问规则
我拥有以下类型的Firebase数据库数据:按数据键列出的Firebase数据库访问规则,firebase,firebase-realtime-database,firebase-security,Firebase,Firebase Realtime Database,Firebase Security,我拥有以下类型的Firebase数据库数据: { sales: { -Axyz: {shop_id: 1, name: item1}, -BqwW: {shop_id: 2, name: item2}, -Cwer: {shop_id: 1, name: item3} } } 我使用auth令牌声明来存储访问级别和ID。 我想让管理员有权访问所有记录和店主有权只访问他们的记录 我有以下数据库规则-管理员用户可以访问所有记录,商店用户可以访问自己的记录:
{ sales:
{ -Axyz: {shop_id: 1, name: item1},
-BqwW: {shop_id: 2, name: item2},
-Cwer: {shop_id: 1, name: item3}
}
}
我使用auth令牌声明来存储访问级别和ID。
我想让管理员有权访问所有记录和店主有权只访问他们的记录
我有以下数据库规则-管理员用户可以访问所有记录,商店用户可以访问自己的记录:
{
"rules": {
"sales": {
".read": "auth.token.admin === true"
"$key": {
".read": "auth.token.shop === true && data.child('shop_id').val() === auth.token.shop_id"
}
}
} }
理想情况下,我希望查询/sales/table并获得相关记录的列表——所有记录都是管理员用户的,一些记录是商店用户的
firebase.database().ref('sales').on('value', ....
有可能以这种方式实施吗
谢谢大家! 感谢评论中的讨论,现在对我有用了 我使用了在中描述的基于查询的规则
仅返回此用户允许查看的值列表您可以编辑问题以包含尝试读取数据但失败的代码吗?您好,谢谢,我现在编辑了Q以更好地解释我试图实现的目标。您的
“sales”:{.read:“auth.token.admin==true”
将为具有admin
声明且true
的用户提供读取权限。如果此类用户在上运行您的代码firebase.database().ref('sales')(“value”
,将允许读取。如果您拒绝此读取,则用户没有正确的权利。商店用户是否可以从/sales/?获取所有“他们的”记录的列表,而管理员可以读取/sales
,其他用户无法从中读取。您可能希望Firebase自动筛选您需要的子节点有权访问,但不幸的是,情况并非如此。安全规则不会自动筛选数据(请参阅)。因此,虽然每个用户都可以访问其店铺的每个销售节点,但他们无法读取/sales
以获取它们的列表。这可能有效,但我不确定
firebase.database().ref('sales')
.orderByChild('shop_id').equalTo(user.claims.shop_id)
.on('value' ...