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

已认证用户创建Google Firestore文档遇权限不足错误的排查与解决

问题分析与解决方案

核心问题

你的安全规则存在两个关键错误:

  • 函数名大小写不匹配:定义的函数是OwnsResource()(首字母大写),但调用时写的是ownsResource()(全小写),Firestore规则对大小写敏感,导致函数调用直接失败。
  • 创建文档时无法访问resource对象:resource.data指向的是已存在的文档数据,而创建操作执行时目标文档还不存在,所以必须改用request.resource.data来获取即将写入的文档数据。

修正后的安全规则

rules_version = '2';

service cloud.firestore {
  match /databases/{database}/documents {

    // 判断用户已登录且是资源所有者(兼容创建/读写场景)
    function ownsResource() {
      return request.auth.uid != null 
        && (request.resource.data.ownerId == request.auth.uid 
            || (resource != null && resource.data.ownerId == request.auth.uid));
    }

    // 默认拒绝所有访问
    match /{document=**} {
      allow read, write: if false;
    }
    
    // 允许项目的创建、读写操作仅对所有者开放
    match /projects/{project} {
      allow create, read, write: if ownsResource();
    }
  }
}

规则说明

  • 统一了函数名的大小写,保证定义和调用一致;
  • 优化了ownsResource()函数逻辑:
    • 创建文档时,通过request.resource.data.ownerId验证写入的ownerId是否等于当前用户UID;
    • 读写已存在文档时,通过resource.data.ownerId验证用户是否为文档所有者;
  • 保留默认拒绝规则,确保未配置的集合不会被意外访问。

额外验证建议

  • 确认this.auth.session!.userUid确实是当前登录用户的UID,避免出现值为空或不匹配的情况;
  • 可以用Firebase控制台的规则模拟器测试创建操作,输入用户UID和模拟请求数据,快速验证规则是否生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:35:05