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

Firestore安全规则:如何查询集合限制单站点已发布页面数量

Firestore安全规则实现已发布页面数量限制

需求与数据库结构

数据库路径:/sites/{siteId}/pages/{pageId}

需求:当指定站点的pages集合中已存在3个isPublished字段为true的已发布页面时,禁止将该集合下任意页面的isPublished字段更新为true;未达到3个时允许发布。

完整安全规则代码

以下是完善后的规则实现,核心是通过canPublishPage函数统计已发布页面数量:

match /sites/{siteId}/pages/{pageId} {
  allow update: if request.resource.data.isPublished == true ? canPublishPage(siteId) : true;
}

function canPublishPage(siteId) {
  // 查询当前站点下所有已发布页面并统计数量
  let publishedPagesCount = get(
    /databases/$(database)/documents/sites/$(siteId)/pages,
    where: 'isPublished', '==', true
  ).count();
  // 仅当已发布页面数量小于3时允许发布
  return publishedPagesCount < 3;
}

关键说明

  • 索引要求:需为sites/{siteId}/pages集合的isPublished字段创建复合索引,否则规则中的过滤查询会执行失败。
  • 状态统计逻辑:get()方法获取的是更新操作执行前的集合状态,统计的是当前已发布页面的存量,不会包含正在更新的文档(若该文档之前未发布),完全符合需求逻辑。
  • 语法兼容性:确保使用支持count()方法的Firestore规则版本,该方法是Firestore规则中用于统计查询结果数量的原生方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 23:23:20