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

Firebase规则校验现有资源返回permission denied,创建帖子触发如何解决

问题原因
  • 核心错误出在write规则误用了resource变量:resource指向Firestore中已经存在的目标文档数据,创建新帖子属于create类型的写入操作,此时目标文档还未生成,resource为空值,校验条件直接不成立,因此返回权限拒绝。
  • 额外问题:原规则没有对写入的editStatus字段做合法性校验,可能导致非法值被写入数据库。
修复方案

将原write规则拆分,区分创建、更新/删除场景,分别适配校验逻辑即可:

match /posts/{post} {
  // 原有读规则保持不变
  allow read: if request.auth != null && resource.data.editStatus == 'published' 
      || request.auth.uid == resource.data.authorId;
  // 新增帖子的校验规则
  allow create: if request.auth != null 
      // 校验传入的authorId必须等于当前登录用户的uid
      && request.auth.uid == request.resource.data.authorId
      // 校验editStatus只能是规定的两个取值,不需要校验可删除该行
      && request.resource.data.editStatus in ['published', 'draft'];
  // 更新、删除帖子的校验规则
  allow update, delete: if request.auth != null 
      // 校验操作者是帖子原作者
      && request.auth.uid == resource.data.authorId
      // 更新时同样校验editStatus取值合法性,不需要校验可删除该行
      && request.resource.data.editStatus in ['published', 'draft'];
}

说明:request.resource指向客户端请求中要写入的新文档数据,适配创建场景下的校验需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 03:00:05