--- title: Panel 写操作缺少 Service 层权限护栏 date: 2026-02-15 module: panel-service problem_type: security_issue severity: critical symptoms: - 板件创建路由做了权限校验,但 Service 层写操作未做 canEditProduct 兜底 - 可通过绕过 Route 的调用路径触发越权写入 root_cause: 权限逻辑集中在 Route,Service 层缺少防线 resolution_type: code_fix status: active confidence: high tags: [security, idor, permission, panel, service-layer] related_patterns: [] --- ## 现象与影响 板件创建接口在 Route 层做了登录+编辑权限校验,但 `panel.service.ts` 的 `create/update/delete/importFromZip` 在写库前不校验产品编辑权限。 一旦存在绕过 Route 的调用(内部复用、脚本、后续新增路由等),会造成跨产品越权写入。 ## 修复动作 1. 在 Service 层新增 `assertCanEditProduct` 权限护栏。 2. 新增 `parseCollaborators` 解析 JSON 协作者列表,兼容权限函数输入。 3. 将护栏接入 `create/update/delete/importFromZip` 四个写操作。 ## 验证 - `npm run type-check -- --pretty false` 通过 ## 预防策略 - 所有写操作必须“Route + Service 双层权限校验”。 - 新增写接口时,优先复用统一权限护栏方法,避免每个方法重复拼装权限对象。