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

Firebase Firestore规则不生效:iOS SDK下限制特定集合写入失败

Firestore规则配置:禁止指定集合写入,允许其余集合读写

你的规则逻辑存在核心问题:Firestore规则遵循允许优先原则——只要有任意一条匹配的规则允许操作,该操作就会被放行。你当前的规则中,虽然给5个目标集合设置了allow write: if false,但后面的match /{document=**}会匹配所有文档(包括这5个集合内的文档),并且允许写入操作,导致前面的禁止规则被完全覆盖,所以这5个集合实际上仍能被写入。而releases集合不在禁止列表中,根据你的需求本就应该允许写入,这部分是符合预期的。

以下是满足你需求的正确规则写法,两种方式任选其一:

方式一:分场景匹配(清晰直观)

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    // 允许所有集合的读取操作
    match /{collection}/{document=**} {
      allow read: if request.time < timestamp.date(2028, 10, 10);
    }

    // 禁止指定5个集合的写入操作
    match /Hello/{document=**} {
      allow write: if false;
    }
    match /Random/{document=**} {
      allow write: if false;
    }
    match /Scope/{document=**} {
      allow write: if false;
    }
    match /type/{document=**} {
      allow write: if false;
    }
    match /Alerts/{document=**} {
      allow write: if false;
    }

    // 允许其他所有集合的写入操作
    match /{collection}/{document=**} {
      allow write: if request.time < timestamp.date(2028, 10, 10) 
                    && collection not in ['Hello', 'Random', 'Scope', 'type', 'Alerts'];
    }
  }
}

方式二:单匹配规则(简洁高效)

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{collection}/{document=**} {
      // 允许所有集合的读取
      allow read: if request.time < timestamp.date(2028, 10, 10);
      // 仅当集合不在禁止列表时允许写入
      allow write: if request.time < timestamp.date(2028, 10, 10)
                    && collection not in ['Hello', 'Random', 'Scope', 'type', 'Alerts'];
    }
  }
}

第二种方式通过collection变量直接获取当前操作的集合名称,用not in判断是否属于禁止列表,既简化了规则结构,又精准满足了你的需求:所有集合可读,指定5个集合禁止写入,其余集合正常允许写入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 10:08:25