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
相关产品推荐
相关产品推荐

