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

如何编写Firestore安全规则:仅Group管理员拥有特定权限,其余用户只读

Firestore安全规则实现方案

规则说明

针对你的群聊数据结构与权限需求,以下是对应的Firestore安全规则实现:

数据结构回顾

主文档路径:/groups/{groupID}
主文档字段:groupID、groupName、adminUID、adminUsername、createDate、creatorUID、creatorUsername、initialGroupCreate
子集合:groupMembersSubcollection

安全规则代码

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    // 主文档权限控制
    match /groups/{groupID} {
      // 验证用户是否为群成员
      function isGroupMember() {
        return exists(/databases/$(database)/documents/groups/$(groupID)/groupMembersSubcollection/$(request.auth.uid));
      }
      // 验证用户是否为管理员
      function isAdmin() {
        return request.auth != null && request.auth.uid == resource.data.adminUID;
      }
      // 验证创建文档时的字段完整性
      function isValidCreateFields() {
        return request.resource.data.keys().hasAll([
          'groupID', 'groupName', 'adminUID', 'adminUsername',
          'createDate', 'creatorUID', 'creatorUsername', 'initialGroupCreate'
        ]) && request.resource.data.keys().size() == 8;
      }

      // 读取权限:管理员或群成员均可读取
      allow read: if request.auth != null && (isAdmin() || isGroupMember());
      // 创建权限:仅管理员可创建,且必须包含指定所有静态字段
      allow create: if request.auth != null && isAdmin() && isValidCreateFields();
      // 修改/删除权限:禁止所有操作
      allow update, delete: if false;
    }

    // 子集合权限控制
    match /groups/{groupID}/groupMembersSubcollection/{memberID} {
      // 复用主文档的管理员验证函数
      function isAdmin() {
        return request.auth != null && get(/databases/$(database)/documents/groups/$(groupID)).data.adminUID == request.auth.uid;
      }
      // 验证用户是否为群成员(当前用户ID匹配子集合文档ID)
      function isGroupMember() {
        return request.auth != null && request.auth.uid == memberID;
      }

      // 读取权限:管理员或群成员均可读取
      allow read: if request.auth != null && (isAdmin() || isGroupMember());
      // 创建/删除权限:仅管理员可操作
      allow create, delete: if request.auth != null && isAdmin();
      // 修改权限:禁止所有操作
      allow update: if false;
    }
  }
}

规则细节解释

  • 主文档部分:
    • 读取权限:仅登录用户且为群成员/管理员可访问;
    • 创建权限:仅管理员可创建,且必须包含所有指定静态字段,避免额外字段混入;
    • 修改/删除:完全禁止,确保静态字段不可变更。
  • 子集合部分:
    • 读取权限:管理员或对应成员本人可读取;
    • 创建/删除:仅管理员可添加或移除群成员;
    • 修改:禁止操作,确保成员记录不可篡改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 10:52:47