Firebase实时数据库角色权限配置求助:读写权限规则异常
Firebase Realtime Database 权限配置修复方案
问题分析
你当前的规则错误在于直接在services根节点定义读取权限,并且错误引用了未在当前层级声明的$servicesId变量。Firebase规则中,要针对单个service节点设置权限,需要在services下嵌套子节点ID变量层级,这样才能正确访问单条服务数据的属性。
正确规则配置
{ "rules": { "services": { "$serviceId": { ".read": "(data.child('roleIns').val() == 'admin') || (data.child('idUser').val() == auth.uid)" } } } }
规则逻辑说明
- 针对
services下的每一条服务数据(子节点)单独设置读取权限 - 满足以下任一条件即可读取对应数据:
- 该服务数据的
roleIns字段值为admin(管理员录入的数据,所有用户均可访问) - 当前登录用户的
auth.uid与该服务数据的idUser字段值完全匹配(普通用户仅能查看自己录入的数据)
- 该服务数据的
测试验证建议
- 测试前确保用户已通过Firebase Auth完成登录,
auth.uid存在且与数据库中users节点的UID一致 - 分两种账号场景验证:
- 使用管理员账号登录,应能查看所有
services下的数据 - 使用普通用户账号登录,仅能查看
idUser与自身UID匹配的数据,无法查看其他普通用户录入的内容
- 使用管理员账号登录,应能查看所有
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

