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

Firestore安全规则仅允许用户写入自身文档报权限错误如何解决

规则失效核心原因

你的规则存在三个关键逻辑错误,直接导致权限校验失败:

  • 错误获取文档ID:request.resource 代表即将写入库的新文档内容对象,本身不携带路径维度的文档ID属性,request.resource.id 属于无效取值。
  • 删除场景触发运行错误:write 规则覆盖创建、更新、删除三类写操作,执行删除操作时不存在待写入的新文档,request.resource 值为null,读取其属性会直接导致规则运行抛出异常,默认拒绝所有请求。
  • 缺少登录态前置校验:未登录状态下request.auth为null,直接读取request.auth.uid会触发空值错误,同样会导致权限拒绝。
修正方案

直接通过match路径捕获的通配符获取目标文档ID即可,路径通配符提取的文档ID在所有读写、删除操作场景下都稳定存在,不会出现空值问题。修正后的完整规则如下:

rules_version = '2';
service cloud.firestore {
    match /databases/{database}/documents {
        function isSignedIn() {
            return request.auth != null;
        }

        match /userSettings/{docId} {
            allow write: if isSignedIn() && request.auth.uid == docId;
            // 若需要收紧读权限为仅本人可读,可将下行规则替换为 allow read: if isSignedIn() && request.auth.uid == docId;
            allow read: if isSignedIn();
        }
    }
}
补充说明
  • 规则判断时把isSignedIn()放在前面,利用逻辑与的短路特性,未登录时直接返回校验失败,避免后续读取request.auth.uid触发空指针错误。
  • 路径通配符的名称可以自定义,比如你原来写的{doc}也可以正常使用,只要和判断逻辑里的变量名保持一致即可。

内容的提问来源于stack exchange,提问作者lurning too koad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 20:27:21