如何在Firebase实时数据库中仅拒绝特定子节点user1的读取权限
数据库权限规则配置问题解决
问题描述
数据库结构
root |_users |_ user0 |_ user1 x |_ user2 |_ . . .
权限需求
仅拒绝user1的数据读取权限,以下路径的读取需正常允许:
/ /users /users/user0 /users/user2
尝试的无效规则
试过下面的规则,但读取/users路径时权限校验不通过:
{ "rules": { "$allreferences": { ".read":true, }, "users": { "$allusers": { ".read":" $allusers !== \"user1\" " } } } }
问题原因
你写的规则只限制了单个用户节点(比如/users/user1)的读取权限,但没给/users这个父节点配置正确的读取规则。Firebase读取父节点时,会优先检查该节点自身的.read规则,而你这里没设置,导致读取/users时权限不通过。
正确规则配置
{ "rules": { ".read": true, "users": { ".read": true, "$userId": { ".read": "$userId !== 'user1'" } } } }
规则说明
- 根节点
/.read: true:直接允许读取根路径/ users/.read: true:允许读取/users节点,这样获取用户列表时,除了user1会被过滤,其他都能正常返回users/$userId/.read:针对单个用户节点,只拒绝user1的读取权限,其他用户节点不受影响
这样配置后,所有需求中的路径都能正常读取,只有/users/user1会被拒绝访问。
内容的提问来源于stack exchange,提问作者Shubh Srivastava
相关产品推荐
相关产品推荐

