You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase Firestore多对多关系读取规则编写及查询权限问题

Firestore多对多客户-用户关系的读取权限规则实现

我懂你的需求——现在你已经搭好多对多的关系结构,查询逻辑也能返回正确结果,就差把开放的读取权限改成安全可控的,只让关联用户能看到对应的客户文档对吧?

先直接给你能用的规则代码,再拆解说明细节:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /clients/{clientId} {
      allow read: if request.auth != null 
                  && resource.data.users[request.auth.uid] == true;
    }
  }
}

规则逻辑拆解:

  • request.auth != null:先把匿名或未登录的访问请求挡在门外,确保只有通过Firebase Auth登录的用户能发起读取请求。
  • resource.data.users[request.auth.uid] == true:这是核心校验环节——检查当前登录用户的UID,是否存在于该clients文档的users对象中,且对应值为true。这和你Android端的查询逻辑whereEqualTo("users."+uid, true)完全匹配。

为什么这个规则适配你的查询?

Firestore的安全规则会做查询过滤验证:它会检查你的查询是否只请求符合规则条件的文档。你的查询已经明确指定只找包含当前用户UID且值为true的客户文档,和规则的校验逻辑完全对齐,所以既能正常返回正确结果,又能阻止用户访问任何和自己无关的客户文档。

举个实际例子:当userId2发起查询时,规则会逐个校验clients集合里的文档,只有clientId1的users对象里存在userId2: true,所以只有这个文档会被允许返回,完全符合你的预期。

内容的提问来源于stack exchange,提问作者SammyT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:43:06