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

无法为安卓应用已认证用户配置Firestore顶层集合列表权限安全规则

问题核心原因

Firestore安全规则不会作为过滤器自动筛选返回结果,它的设计逻辑是:要求你发起的查询本身必须能保证所有返回结果符合规则约束,否则会直接拒绝请求,而不是返回部分符合条件的结果。

不同请求表现差异的原因

  • 单文档get请求可以正常通过:你请求确定ID的单个文档时,规则只需要校验该文档的user_id字段值和当前登录用户UID一致即可,符合校验条件,所以请求成功。
  • 全集合查询被拒绝:你直接调用Firebase.firestore.collection("memos")是请求返回memos集合下的所有文档,规则无法确认集合内所有文档都满足user_id == 当前用户UID的条件,因此直接拒绝请求。

解决方案

你不需要修改现有的数据库结构,只要调整查询逻辑即可:
在查询memos集合时主动添加user_id过滤条件,明确只查询当前登录用户创建的备忘录:

// Kotlin示例,Java写法逻辑一致
val currentUid = FirebaseAuth.getInstance().currentUser?.uid ?: return
Firebase.firestore.collection("memos")
    .whereEqualTo("user_id", currentUid)
    .get()
    // 后续业务处理逻辑

你原来的安全规则不需要修改,只要查询携带了对应的user_id过滤条件,规则就会正常校验通过。

补充说明

你之前使用/users/{userId}/memos子集合结构可以生效,是因为该结构下路径直接携带了用户UID参数,规则可以直接匹配路径中的userId变量和当前登录用户UID,不需要依赖文档字段校验,因此直接查询对应子集合即可通过规则校验。


内容的提问来源于stack exchange,提问作者Yoann.G

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:24:07