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

Firestore报调用者无权限 仅文档创建者可读规则不生效如何解决

问题原因

Firestore安全规则不会对查询结果做过滤操作,它只会校验你的查询是否满足规则约束的前提,只要查询有可能返回不符合规则的文档,就会直接返回权限错误,不会执行查询。
你现在的规则要求用户只能读取uid等于自己登录uid的文档,但你写的Flutter查询语句里完全没有包含uid相关的筛选条件,Firestore无法确认你这个查询返回的结果全部都符合uid == 当前登录用户uid的约束,所以直接拒绝了请求。

修复方案

你只需要在现有的查询条件里额外加一个uid等于当前登录用户uid的筛选条件即可,修改后的查询示例:

_firestore
  .collection('subscriptions')
  .where('uid', isEqualTo: FirebaseAuth.instance.currentUser!.uid) // 新增的uid筛选条件,和规则匹配
  .where('anotherId', isEqualTo: '1')
  .where('andAnotherId', isEqualTo: '2')
  .where('date', isGreaterThanOrEqualTo: dateInSeconds)
  .limit(1)
  .get()
  .then(....

修改后你的查询和规则约束完全匹配,Firestore就会放行请求,同时也能保证只会返回当前用户自己创建的订阅文档。

补充说明:如果你之前没有为这个查询创建复合索引,第一次执行时会报错,错误日志里会直接给出创建对应索引的跳转入口,在Firebase控制台完成索引创建后查询即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:24:03