如何查询Firebase Realtime Database多用户可访问条目并配置安全规则
安全规则配置方案
你可以直接使用如下Firebase Realtime Database安全规则,同时满足合法查询放行、未授权访问拦截的需求:
{ "rules": { "items": { // 为users下的动态uid字段建立查询索引 ".indexOn": "users/*", ".read": "auth != null && query.orderByChild === 'users/' + auth.uid && query.equalTo === true", "$itemId": { // 单独访问单个item时的权限校验 ".read": "auth != null && data.child('users').child(auth.uid).val() === true", // 可根据自身业务需求修改写入规则,默认禁止所有写入 ".write": false } } } }
规则说明
- 索引配置:
.indexOn: "users/*"为items节点下所有子项的users字段的动态子键建立索引,保证你的orderByChild(users/${currentUserUid})查询可以正常执行,不会抛出索引缺失错误,同时优化查询性能。 - 列表查询权限校验:items节点的.read规则限定了只有同时满足三个条件的请求才允许执行:
- 请求用户已登录(auth不为空)
- 查询的排序字段为
users/当前登录用户自己的uid,无法查询其他用户的权限字段 - 查询条件为等于true,匹配你当前的查询逻辑
所有不符合上述条件的列表查询(比如全量拉取items、查询其他用户的权限等)都会直接被拒绝。
- 单item访问权限校验:$itemId节点的.read规则限定了用户直接访问单个item路径时,只有自己在该item的授权用户列表里才能拿到数据,避免用户通过拼接路径越权访问无权限的item。
内容的提问来源于stack exchange,提问作者Simon Tran
相关产品推荐
相关产品推荐

