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

如何编写Firestore安全规则实现用户专属table_values数据访问

Firestore安全规则实现方案

针对你的数据结构,直接通过比对文档字段与当前用户Auth ID即可实现权限控制,无需调整现有集合结构。

完整规则代码

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    // 控制table_values集合的读写权限
    match /table_values/{docId} {
      // 读取权限:仅登录用户且文档user_id与自身Auth ID匹配
      allow read: if request.auth != null && resource.data.user_id == request.auth.uid;
      
      // 写入权限:仅登录用户,且操作的文档user_id与自身Auth ID匹配(防止篡改user_id)
      allow write: if request.auth != null && 
                    request.resource.data.user_id == request.auth.uid &&
                    // 可选:更新时不允许修改user_id
                    (resource == null || resource.data.user_id == request.auth.uid);
    }

    // 可选:users集合的权限控制(确保用户仅能访问自己的用户文档)
    match /users/{docId} {
      allow read, write: if request.auth != null && resource.data.user_id == request.auth.uid;
    }
  }
}

关键逻辑说明

  1. 登录验证:request.auth != null 确保只有已通过Firebase Auth登录的用户能进行操作
  2. 字段匹配:resource.data.user_id == request.auth.uid 直接比对table_values文档中的user_id字段与当前用户的Auth ID,无需关联查询users集合(因为两者的user_id字段是关联一致的)
  3. 写入防护:写入时使用request.resource.data.user_id确保用户创建新文档时只能设置自己的user_id,同时添加更新时的校验,防止用户篡改现有文档的user_id字段

注意事项

  • 务必保证table_values和users集合中的user_id字段存储的是Firebase Auth返回的用户UID(即Google登录后的用户唯一标识)
  • 如果需要验证用户是否存在于users集合中,由于Firestore安全规则不支持跨集合的条件查询(除非已知文档路径),你需要额外维护一个以Auth UID为文档ID的映射集合,否则无法在规则中直接验证用户存在性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 16:40:19