首页 > 解决方案 > Firebase 规则设置

问题描述

我们有一个firebase结构作为附加图像。

在此处输入图像描述

我目前的规则是

 "Games":{
     ".read":"query.orderByChild == 'email' ",
     "$gid":{
        ".read":true,
        ".write":true
     },
     ".write":false,
}

这有助于禁用对父级的访问,但是当传递了空白电子邮件 ID 时,它正在获取整个数据库,因此是否可以使用规则检查电子邮件的长度?

标签: firebasefirebase-realtime-databasefirebase-security

解决方案


我很难盲目地验证这个答案(所以请谨慎对待),但我希望这会给你一个方向性的帮助。

因此,在您的情况下,“下载”意味着读取 db.ref('/Games') 的能力应该不可用,但是用户(或某些用户组?)应该能够读取 db.ref('Games/$游戏ID')。

根据这篇文章:https ://firebase.google.com/docs/database/security/securing-data#rules_are_not_filters

您无法通过限制“.read”的安全规则实现这一点:在“/Games”级别为false,因为这将阻止读取任何gameId,因为安全规则将级联。

您可以做的是尝试使用查询作为文章中所述的“过滤”方式:

"Games":{
     ".read":"query.orderByChild == 'email' ",
     "$gid":{
        ".read": "query.orderBy("email") && query.equalTo === $gid",
        ".write":true
     },
     ".write":false,
}

所以你的数据库查询应该是这样的:

gamesRef = database.ref('Games').orderByChild('gameId').equalTo(20204315123456)

以上假设 gameId 也是 Games 列表中每个 $gameId 项目的属性。上面的查询将检查属性为“gameId”且等于客户端提供的值(与键相同)的孩子的游戏列表。

希望对您有所帮助。


推荐阅读