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

Firestore安全规则问题:实现用户仅访问对应schoolid的数据

Firestore 规则配置解决方案

你的原规则写法不符合Firestore规则语法,路径匹配不能直接嵌套其他集合的字段路径,正确的规则应该通过获取当前登录用户的schoolid,再与instituteTbl文档的schoolid做匹配来实现权限控制。

正确规则示例

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    // 配置userTbl权限:用户仅能访问自己的文档
    match /userTbl/{userId} {
      allow read, write: if request.auth.uid == userId;
    }

    // 配置instituteTbl权限:仅允许schoolid匹配的登录用户访问
    match /instituteTbl/{docId} {
      allow read, write: if 
        request.auth != null && 
        get(/databases/$(database)/documents/userTbl/$(request.auth.uid)).data.schoolid == resource.data.schoolid;
    }
  }
}

规则说明

  • request.auth != null:确保访问请求来自已登录用户
  • get(...):通过用户的Auth UID,从userTbl中获取该用户的schoolid值
  • resource.data.schoolid:指代当前访问的instituteTbl文档中的schoolid字段
  • 两者相等时,才允许该用户进行读写操作

注意事项

  1. 确保userTbl中的文档ID与用户的Firebase Auth UID完全一致(从你提供的截图来看,文档ID是用户UID,符合要求)
  2. 批量查询instituteTbl时,必须带上where("schoolid", "==", 用户的schoolid)条件,否则Firestore规则会拒绝查询(规则要求只能访问匹配schoolid的数据,不带条件的查询会被视为试图获取所有数据,违反规则)

你提供的数据结构说明

  • userTbl:文档ID为用户Auth UID,包含schoolid字段(字符串类型,如截图中的SCH001)
  • instituteTbl:每个文档包含schoolid字段,与userTbl中的schoolid对应

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 10:25:21