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
相关产品推荐
相关产品推荐

