首页 > 解决方案 > 用户扫描二维码以读取和写入特定数据库节点后如何在 Firebase 中设置安全规则

问题描述

我真的很感激这方面的一些帮助。

我正在开发一个针对父母和孩子的应用程序,我目前正在使用 Firebase 实时数据库和 Firebase Auth。

家长使用电子邮件和密码创建一个帐户。然后,它使用父 UID 作为节点的键在数据库中创建一个新节点。

然后,父母会生成一个二维码,孩子可以使用其他设备扫描该二维码。二维码包含数据库节点密钥。扫描后,子节点现在可以在与父节点相同的节点中读写。

我的问题是,我怎么能/无论如何我可以在firebase中设置安全规则,只允许扫描二维码的父母和孩子读写并防止我的数据库被暴露?

孩子需要能够从父母节点读取和写入,因为不能期望他们使用电子邮件和密码进行注册以通过身份验证。这就是我使用二维码的原因,因为它可以让孩子快速轻松地加入。

非常感谢

标签: firebasefirebase-realtime-databasefirebase-authenticationfirebase-security

解决方案


在实时数据库的“用户”表中,您可以使用不同的设置设置“权限”或“用户类型”标志。然后,这些设置可以指示用户具有哪些访问权限。

然后,您可以在规则中设置访问权限,假设用户具有正确的标志类型/设置。

"Charges" : {
   ".read": "auth != null",
   ".write": "(root.child('Groups').child($GroupId).child('CustomerDatabase').child(auth.uid).child('userType').val() == 'admin')"
        }

在此示例中,对“Charges”表的写入权限仅限于“CustomerDatabase”表中“userType”字段设置为“admin”的用户。您可以选择多种用户类型,如下所示:

"Charges" : {
   ".read": "auth != null",
   ".write": "(root.child('Groups').child($GroupId).child('CustomerDatabase').child(auth.uid).child('userType').val() == 'admin') 
        || (root.child('Groups').child($GroupId).child('CustomerDatabase').child(auth.uid).child('userType').val() == 'leader')"
 },

在此示例中,用户必须设置“管理员”或“领导者”。


推荐阅读