如何设置Firebase规则 仅允许列表内用户读写数据库其他指定节点
Firebase数据库跨节点访问权限配置方案
你可以通过Firebase实时数据库规则内置的exists()方法校验用户是否在白名单节点内,以下是适配你的数据库结构的完整规则:
{ "rules": { "SomeDB": { "SomethingForWR": { // 仅允许已登录且在ListOfUsers中登记的用户读取 ".read": "auth != null && exists(root.child('SomeDB/ListOfUsers').child(auth.uid))", // 仅允许已登录且在ListOfUsers中登记的用户写入 ".write": "auth != null && exists(root.child('SomeDB/ListOfUsers').child(auth.uid))" } // ListOfUsers节点的权限可根据业务需求单独配置,不受上述规则影响 } } }
规则逻辑说明
- 首先通过
auth != null校验用户是否处于已登录状态,避免未登录访问产生不必要的异常 root.child('SomeDB/ListOfUsers').child(auth.uid)会从数据库根节点定位到ListOfUsers下,和当前登录用户uid同名的子节点exists()方法会判断上述定位的节点是否真实存在,只要存在就说明用户属于允许访问的白名单,即可放行读写请求
注意事项
- 如果你后续调整了ListOfUsers的结构,将用户uid存储在子字段而非子键中,可以将校验逻辑修改为
exists(root.child('SomeDB/ListOfUsers').orderByChild('key').equalTo(auth.uid))即可适配,不过当前结构直接用子键判断的查询效率更高 - 该规则只会限制SomethingForWR节点的访问权限,不会影响其他节点的权限配置
内容的提问来源于stack exchange,提问作者daniel ng
相关产品推荐
相关产品推荐

