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

如何在SwiftUI中通过Firebase实现用户专属训练数据的隔离访问

实现Firestore仅允许用户访问自己创建的训练内容

要实现这个需求,核心是结合用户身份标识、Firestore安全规则和前端查询过滤三个环节,具体步骤如下:

1. 调整数据结构:为训练文档添加用户标识

在每个训练文档中新增一个userId字段,存储创建该训练的用户UID(来自Firebase Auth的用户唯一标识)。比如你的训练集合是trainings,单个文档结构可以是:

{
  "title": "核心力量训练计划",
  "content": "一组核心训练动作列表",
  "createdAt": "2024-05-20T12:00:00Z",
  "userId": "abc123xyz789" // 这里填当前登录用户的UID
}

用户创建训练时,务必将当前登录用户的UID写入这个字段,后续安全规则会防止客户端随意篡改该值。

2. 配置Firestore安全规则:限制访问权限

这是实现数据隔离的核心,通过安全规则强制只有文档创建者才能访问对应内容。修改你的Firestore安全规则为:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    // 针对trainings集合的权限规则
    match /trainings/{trainingId} {
      // 读权限:仅登录用户且文档userId与当前用户UID匹配
      allow read: if request.auth != null && request.auth.uid == resource.data.userId;
      // 写权限:创建时必须设置正确的userId,更新/删除仅能操作自己的文档
      allow write: if request.auth != null && 
                    (request.resource.data.userId == request.auth.uid && 
                     (request.method == 'create' || resource.data.userId == request.auth.uid));
    }
  }
}

规则说明:

  • request.auth != null确保只有登录用户能进行操作
  • 读操作要求文档的userId与当前用户UID完全一致
  • 写操作中,创建文档必须绑定当前用户UID;更新/删除仅能操作属于自己的文档

3. 前端查询过滤:主动获取当前用户的训练内容

即使安全规则已限制权限,前端查询时也应主动过滤,只请求当前用户的训练数据,减少无效请求并提升体验。以JavaScript为例:

// 假设已通过Firebase Auth获取当前登录用户
const currentUser = firebase.auth().currentUser;
if (currentUser) {
  // 查询当前用户创建的所有训练
  const userTrainingsRef = firebase.firestore().collection('trainings').where('userId', '==', currentUser.uid);
  userTrainingsRef.get().then((querySnapshot) => {
    querySnapshot.forEach((doc) => {
      // 处理用户自己的训练数据
      console.log(doc.id, " => ", doc.data());
    });
  });
}

注意事项

  • 必须确保应用已集成Firebase Auth,所有用户操作需先完成登录,才能获取有效的用户UID
  • 数据隔离必须依赖安全规则强制执行,不能仅靠前端过滤(前端过滤仅作为体验优化)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:43:13