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

Firestore安全规则问题:仅允许用户更新自身嵌套员工信息

解决Firestore仅允许用户更新自身员工信息的规则问题

原规则失效的核心原因

你的规则里写错了字段名:文档结构中存储员工状态的是employeeInfo.employeeStatus,但规则里写成了employeeInfo.employees,路径不匹配导致规则无法正确识别合法的更新操作。

正确的规则写法

除了修正字段名,还要确保用户只能修改自己UID对应的状态字段,同时不能改动文档中的其他内容(比如workplace、area、employeeInfo.count或其他员工的状态),以下是完整的规则示例:

allow update: if request.auth != null
  // 1. 确保仅修改了自身UID对应的员工状态字段
  && request.resource.data.diff(resource.data).affectedKeys().hasOnly([
    'employeeInfo.employeeStatus.' + request.auth.uid
  ])
  // 2. 验证顶级核心字段未被篡改
  && request.resource.data.workplace == resource.data.workplace
  && request.resource.data.area == resource.data.area
  // 3. 验证员工总数等其他嵌套字段未被修改
  && request.resource.data.employeeInfo.count == resource.data.employeeInfo.count;

补充说明

  • 如果允许用户首次添加自己的状态(即之前文档中没有该用户的UID条目),无需额外校验;如果仅允许修改已有状态,可以添加resource.data.employeeInfo.employeeStatus.keys().has(request.auth.uid)确保用户只能修改自己已存在的条目。
  • 使用diff().affectedKeys()可以精准对比前后文档的差异键,确保只有目标字段被修改,避免遗漏其他潜在的非法修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 08:02:44