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

Firestore安全规则漏洞排查及用户文档复制规则报错解决咨询

Firestore安全规则排查与复制文档权限问题解决请求

一、初始规则漏洞排查需求

我需要在users目录下先复制用户资料并重命名,再删除原用户目录。当前使用的Firestore安全规则疑似存在安全隐患,附上规则代码,请求排查其中的漏洞或冗余内容:

match /users/{userId} {
    allow read: if request.auth != null;

    allow create: if request.auth != null 
    && request.auth.uid == request.resource.data.id;

    allow update: if request.auth != null 
    && request.auth.uid == request.resource.data.id 
    && request.auth.uid == userId;

    allow delete: if request.auth != null;
}

二、修改规则后复制文档报错的解决方案请求

采纳Frank van Puffelen的建议修改规则后,其他功能正常,但在同一目录重命名复制文件时,create规则触发报错(标注👈处)。附上修改后的规则及React Native复制代码,请求解决该问题:

修改后的Firestore规则

match /users/{userId} {
    allow read: if request.auth != null;
      
    // Frank van Puffelen’s sound suggestions [BELOW]
    allow create: if request.auth != null 
    && request.auth.uid == request.resource.data.id
    && request.auth.uid == userId; // 👈 ***** 此处导致复制操作失败 *****

    allow update: if request.auth != null 
    && request.auth.uid == request.resource.data.id 
    && request.auth.uid == resource.data.id
    && request.auth.uid == userId;
      
    allow delete: if request.auth != null
    && request.auth.uid == resource.data.id
    && request.auth.uid == userId;
}

React Native复制实现代码

// 获取原始文档引用
const deleteUser = doc(db, `users/${user?.uid}/`);
const deleteUserDoc = await getDoc(deleteUser);
            
if(!deleteUserDoc.exists()) {
    console.error("用户文档不存在。");
    return;
}
      
const deleteUserData = deleteUserDoc.data();

// 创建复制文档的引用
const dupeUser = doc(firestore, 'users', `Dupe:${user?.uid}/`); // 👈 触发规则错误
        
// 保存复制的数据
await setDoc(dupeUser, deleteUserData);

恳请提供进一步帮助,谢谢!


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 07:47:13