# 03 — 封遗留写路径 + 收拢 Mapper 到 Service 层 **What to build:** 删除 SystemController 中无防护的 /menus/save 和 /menus/delete 端点(ResourceController 已覆盖)。将 assign-menus、roles/delete、users/assign-roles 的 Mapper 操作收进 Service 层,加 @Transactional 事务保护。SystemController 不再持有 SysRoleMenuMapper / SysUserRoleMapper。 **Blocked by:** 01 — ApiPermissionCache + ApiPermissionInterceptor 核心拦截链路 **Status:** ready-for-agent - [ ] 删除 SystemController 中 /menus/save 端点 - [ ] 删除 SystemController 中 /menus/delete 端点 - [ ] ISysRoleService 新增 assignMenus(roleId, menuIds),@Transactional,先删后插 - [ ] ISysRoleService 新增 deleteRoleCascade(roleId),@Transactional,删角色 + 清理 sys_role_menu - [ ] IAuthUserService 新增 assignRoles(userId, roleIds),@Transactional,先删后插 - [ ] SystemController 对应端点改调 service 方法 - [ ] SystemController 移除 SysRoleMenuMapper / SysUserRoleMapper 依赖 - [ ] 现有测试回归通过