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

Firestore规则配置:如何允许创建文档但禁止更新?

解决Firestore允许创建但禁止更新的规则配置问题

你的规则看似禁止了更新操作,但实际setData能修改已有文档的原因是:Firestore中setData在文档已存在时会触发update操作,你需要更精准地限制只有新文档才能被写入。以下是两种正确的规则配置方案:

方案一:明确区分操作类型

直接针对create、update、delete操作分别配置权限:

rules_version = '2';

service cloud.firestore {
  match /databases/{database}/documents {
    match /reservedUsernames/{username} {
      // 仅允许已认证用户创建新文档
      allow create: if request.auth != null;
      // 完全禁止更新、删除已有文档
      allow update, delete: if false;
    }
  }
}

方案二:用exists()函数统一限制

通过判断文档是否存在,直接限制只有新建文档才能被写入,写法更简洁:

rules_version = '2';

service cloud.firestore {
  match /databases/{database}/documents {
    match /reservedUsernames/{username} {
      // 仅允许已认证用户写入不存在的文档(即创建新文档)
      allow write: if !exists() && request.auth != null;
    }
  }
}

额外注意事项

  • 部署规则后,确保测试用的是已认证用户(规则要求request.auth != null)
  • 确认你的setData操作确实指向已存在的文档(比如searchableUsername的值是已创建的sam)
  • 即使setData使用merge参数(如部分字段更新),仍属于update操作,会被上述规则拦截

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 04:48:29