首页 > 解决方案 > 按数据键的 Firebase 数据库访问规则

问题描述

我有以下类型的 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', ....

有可能以这种方式实现吗?

谢谢!

标签: firebasefirebase-realtime-databasefirebase-security

解决方案


感谢评论中的讨论,它现在对我有用。

我使用了https://firebase.google.com/docs/database/security/securing-data#query-based_rules中描述的基于查询的规则

firebase.database().ref('sales') 
    .orderByChild('shop_id').equalTo(user.claims.shop_id) 
    .on('value' ...

仅返回此用户允许查看的值列表


推荐阅读