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

Angular使用Firestore配置用户自有数据权限时出现权限不足及登录异常问题

问题成因及解决方案

1. 初始规则写入子集合权限不足的原因

Firestore安全规则默认不会递归匹配父文档下的子集合,你初始配置的规则仅对/users/{uid}这个父级文档本身生效,而业务代码中写入的是/users/{uid}/shipped、/users/{uid}/preordered这类子集合下的文档,没有匹配到任何权限规则,Firestore默认拒绝所有未匹配到规则的请求,因此抛出权限不足错误。

2. 改用递归通配后登录失败、注册正常的原因

你调整为match /users/{user=**}的递归规则后,存在两个逻辑问题:

  • 通配符捕获的变量名从原来的uid变成了user,原有规则中request.auth.uid == uid的判断条件里uid变量不存在,条件永远不成立
  • 注册流程是首次创建/users/{uid}文档,触发create权限校验,create仅要求request.auth != null,满足条件所以功能正常;而登录流程调用setUserData时使用{merge: true}配置,若用户文档已存在,此时触发的是update权限校验,需要满足身份匹配条件,因为变量不匹配导致条件不成立,因此触发权限不足。

3. 最终修复方案

推荐使用显式匹配的安全规则,逻辑更清晰可控:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
      match /users/{uid} {
        allow create: if request.auth != null;
        allow read, update, delete: if request.auth != null && request.auth.uid == uid;
        // 匹配当前用户下所有子集合的权限
        match /{document=**} {
          allow read, write: if request.auth != null && request.auth.uid == uid;
        }
      }
  }
}

额外注意:需要确保调用addToOrders方法时,authService.currentUser已经完成认证初始化,避免取到空的uid导致权限校验失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:45:00