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

Firestore规则配置求助:父文档字段校验与子集合权限管控

Firestore 规则配置方案

以下是满足你需求的完整Firestore规则,重点解决子集合与父文档的权限关联问题:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    // 父文档 releases 的规则(包含uid不可修改约束)
    match /releases/{releaseId} {
      allow read: if request.auth != null;
      allow create: if request.auth != null && request.resource.data.uid == request.auth.uid;
      allow update: if request.auth != null 
                   && resource.data.uid == request.auth.uid 
                   && request.resource.data.uid == resource.data.uid; // 强制uid字段创建后不可修改
      allow delete: if request.auth != null && resource.data.uid == request.auth.uid;

      // 子集合 covers 的权限规则
      match /covers/{coverId} {
        allow read: if request.auth != null;
        // 仅父文档所有者可执行写/删操作
        allow create, update, delete: if request.auth != null 
                                      && get(/databases/$(database)/documents/releases/$(releaseId)).data.uid == request.auth.uid;
      }

      // 子集合 tracks 的权限规则
      match /tracks/{trackId} {
        allow read: if request.auth != null;
        // 复用父文档所有者校验逻辑
        allow create, update, delete: if request.auth != null 
                                      && get(/databases/$(database)/documents/releases/$(releaseId)).data.uid == request.auth.uid;
      }
    }
  }
}

关键规则说明

  1. 父文档uid不可修改:在update规则中增加request.resource.data.uid == resource.data.uid约束,确保任何修改操作都无法改动uid字段。
  2. 子集合权限关联父文档:通过get()方法读取对应父releases文档的uid字段,与当前登录用户的request.auth.uid匹配,实现仅所有者操作子集合的需求。
  3. 全局读权限:所有已登录用户(request.auth != null)均可读取releases集合及其子集合的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:45:35