如何基于Firestore文档控制Firebase Realtime DB节点的访问权限?
基于Firestore文档控制Firebase Realtime DB节点权限
可以实现这种跨服务的权限控制,但你给出的规则写法存在语法错误,需要调整后才能生效。
修正后的规则示例
{ "rules": { ".read": false, ".write": false, "AdminsOnly": { ".read": "auth != null && get(/databases/$(database)/documents/Users/$(auth.uid)).data.isAdmin == true", ".write": "auth != null && get(/databases/$(database)/documents/Users/$(auth.uid)).data.isAdmin == true" } } }
关键细节说明
- Realtime DB安全规则支持通过
get()方法调用Firestore的文档数据,路径格式必须遵循/databases/$(database)/documents/[集合名]/[文档ID],这里你的用户文档存放在Users集合,文档ID对应用户的auth.uid - 必须通过
.data.isAdmin来访问Firestore文档中的字段值,你的示例里缺少引号和正确的访问语法 - 加入
auth != null的判断,避免未登录用户触发无效的Firestore调用,同时也能提前拦截无权限请求
注意事项
- 每次Realtime DB的权限检查都会触发一次Firestore文档读取,会产生额外的Firestore计费
- 要确保
Users集合中存在对应用户ID的文档,否则get()会返回null,导致权限验证失败 - 如果追求性能和成本优化,可以把Firestore中的权限字段同步到Realtime DB的用户节点中,直接在Realtime DB规则中读取本地数据,避免跨服务调用
内容的提问来源于stack exchange,提问作者gantonioid
相关产品推荐
相关产品推荐

