# M006 System Admin Management Console V1 Implementation Plan > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. **Goal:** 实现 M006 系统管理后台 V1,让系统管理员可以通过受控接口和前端页面管理用户、角色权限、菜单、酒店和用户酒店授权。 **Architecture:** 后端继续使用 `platform.identity`、`platform.access`、`platform.navigation`、`platform.hotel` 分模块承载管理能力,新增平台管理审计和统一管理鉴权服务。前端新增 `/system/*` 子路由和系统管理页面,复用现有 `httpClient`、登录态和菜单权限模型。 **Tech Stack:** Java 17、Spring Boot 3.5、MyBatis-Plus、Flyway、JUnit 5、Vue 3、TypeScript、Pinia、Vitest。 ## Global Constraints - 管理接口统一使用 `/api/admin/**`。 - 管理接口必须强制登录和权限校验,不能依赖 `OptionalAuthTokenFilter` 的兼容行为。 - 系统管理入口使用 `SYSTEM_ADMIN_CONSOLE_ACCESS` 权限码。 - 分页请求使用 `page_num`、`page_size`,响应使用 `{ items, page: { page_num, page_size, total } }`。 - 内置角色第一版只读,自定义角色可管理。 - 单酒店阶段允许新增酒店但默认 `DISABLED`,禁止启用第二家 `ACTIVE`,禁止禁用最后一家 `ACTIVE`。 - `hotel_id` 新增后不可修改。 - 新增菜单允许未知路由,但未知路由前端必须安全兜底。 - 写操作必须写入独立平台管理审计表,审计不得保存密码、token、secret。 - 后端代码遵守 `control`、`service`、`service.impl`、`domain`、`mapper`、`repository`、`common.request/result/dto/enums` 包结构。 - Controller、Service、ServiceImpl 方法必须有中文注释;Entity 字段必须有中文注释。 --- ### Task 1: M006 基础权限、菜单入口和管理鉴权 **Files:** - Modify: `server/src/main/java/cn/nianxx/thhotel/platform/access/common/enums/PlatformPermissionCode.java` - Modify: `server/src/main/java/cn/nianxx/thhotel/platform/navigation/common/enums/PlatformMenuCode.java` - Modify: `server/src/main/java/cn/nianxx/thhotel/platform/identity/service/impl/PlatformIdentityBootstrapRunner.java` - Create: `server/src/main/java/cn/nianxx/thhotel/platform/security/service/AdminAuthorizationService.java` - Create: `server/src/main/java/cn/nianxx/thhotel/platform/security/service/impl/AdminAuthorizationServiceImpl.java` - Create: `server/src/main/java/cn/nianxx/thhotel/platform/security/service/impl/AdminAuthorizationException.java` - Test: `server/src/test/java/cn/nianxx/thhotel/platform/identity/control/AuthControllerTest.java` - Test: `server/src/test/java/cn/nianxx/thhotel/platform/security/service/impl/AdminAuthorizationServiceImplTest.java` **Interfaces:** - Produces: `AdminAuthorizationService.requirePermission(String permissionCode)` returns current `AuthenticatedUserContext` or throws an admin authorization exception. - Produces: `SYSTEM_ADMIN_CONSOLE_ACCESS` permission code and visible `/system` menu. - [x] Add `SYSTEM_ADMIN_CONSOLE_ACCESS` to platform permission enum. - [x] Change `SYSTEM_SETTINGS` menu to visible and bind `SYSTEM_ADMIN_CONSOLE_ACCESS`. - [x] Include `SYSTEM_ADMIN_CONSOLE_ACCESS` in `SYSTEM_ADMIN` built-in permissions. - [x] Create admin authorization service with 401 and 403 semantics. - [x] Add tests for missing token, missing permission and successful authorization. - [x] Run focused backend tests. ### Task 2: CP4-1 后端只读查询接口 **Files:** - Create/Modify under `platform.identity.common.result/request/service/control/repository` - Create/Modify under `platform.access.common.result/request/service/control/repository` - Create/Modify under `platform.navigation.common.result/request/service/control/repository` - Create/Modify under `platform.hotel.common.result/request/service/control/repository` - Test: admin read-only controller tests. **Interfaces:** - Produces: `GET /api/admin/users` - Produces: `GET /api/admin/users/{userId}` - Produces: `GET /api/admin/roles` - Produces: `GET /api/admin/roles/{roleId}` - Produces: `GET /api/admin/permissions` - Produces: `GET /api/admin/menus` - Produces: `GET /api/admin/menus/{menuId}` - Produces: `GET /api/admin/hotels` - Produces: `GET /api/admin/hotels/{hotelId}` - [x] Add repository list/detail methods with pagination where needed. - [x] Add Service interfaces and implementations for read-only admin queries. - [x] Add Controller classes with Chinese method comments. - [x] Enforce management permissions per endpoint. - [x] Return string IDs and UTC time strings. - [x] Add MockMvc tests for 401, 403 and successful list responses. - [x] Run focused backend tests. ### Task 3: CP4-1 前端只读系统管理页面 **Files:** - Modify: `client/src/types/auth.ts` - Modify: `client/src/router/index.ts` - Modify: `client/src/layouts/ReservationAppShell.vue` - Create: `client/src/types/systemAdmin.ts` - Create: `client/src/services/systemAdminService.ts` - Create: `client/src/views/system/SystemAdminLayoutView.vue` - Create: `client/src/views/system/SystemUsersView.vue` - Create: `client/src/views/system/SystemRolesView.vue` - Create: `client/src/views/system/SystemMenusView.vue` - Create: `client/src/views/system/SystemHotelsView.vue` - Modify: locale files under `client/src/i18n/locales/` - Test: front-end route/service/view tests. **Interfaces:** - Consumes: Task 2 admin read-only endpoints. - Produces: visible `/system/*` routes and read-only admin tables. - [x] Add `SYSTEM_ADMIN_CONSOLE_ACCESS` to auth permission type. - [x] Add `/system` redirect and `/system/*` child routes. - [x] Add system menu label and known route fallback. - [x] Implement API service and types. - [x] Implement four read-only pages with loading, error and empty states. - [x] Add frontend tests for route permission and API parameter mapping. - [x] Run frontend typecheck and tests. ### Task 4: 平台管理审计底座 **Files:** - Create: `server/src/main/resources/db/migration/V15__create_platform_admin_audit_log.sql` - Create: `server/src/main/java/cn/nianxx/thhotel/platform/audit/domain/PlatformAdminAuditLogEntity.java` - Create: `server/src/main/java/cn/nianxx/thhotel/platform/audit/mapper/PlatformAdminAuditLogMapper.java` - Create: `server/src/main/java/cn/nianxx/thhotel/platform/audit/repository/PlatformAdminAuditLogRepository.java` - Create: `server/src/main/java/cn/nianxx/thhotel/platform/audit/repository/MybatisPlatformAdminAuditLogRepository.java` - Create: `server/src/main/java/cn/nianxx/thhotel/platform/audit/common/dto/PlatformAdminAuditLogDraft.java` - Create: `server/src/main/java/cn/nianxx/thhotel/platform/audit/service/PlatformAdminAuditLogService.java` - Create: `server/src/main/java/cn/nianxx/thhotel/platform/audit/service/impl/PlatformAdminAuditLogServiceImpl.java` - Test: audit migration/repository/service tests. **Interfaces:** - Produces: `record(PlatformAdminAuditLogDraft draft)` for management write operations. - [x] Add migration with utf8mb4_bin and Chinese comments. - [x] Add Entity, Mapper, Repository, Service. - [x] Ensure snapshots exclude password, token and secret. - [x] Add tests for audit insert and secret-safe snapshots. - [x] Run focused backend tests. ### Task 5: CP4-2 用户管理写操作 **Files:** - Modify identity repository/service/control request/result classes. - Modify access and hotel repositories for user-role and user-hotel overwrite operations. - Test: user management controller/service tests. **Interfaces:** - Produces: `POST /api/admin/users` - Produces: `PUT /api/admin/users/{userId}` - Produces: `POST /api/admin/users/{userId}/enable` - Produces: `POST /api/admin/users/{userId}/disable` - Produces: `POST /api/admin/users/{userId}/password-reset` - Produces: `PUT /api/admin/users/{userId}/roles` - Produces: `PUT /api/admin/users/{userId}/hotels` - [x] Implement create/edit user. - [x] Implement enable/disable with last active super admin protection. - [x] Revoke all ACTIVE sessions when disabling a user. - [x] Implement password reset returning temporary password once. - [x] Implement role overwrite and hotel overwrite with single default hotel. - [x] Record admin audit for every write operation. - [x] Add tests for success, 401, 403 and conflict paths. ### Task 6: CP4-3 角色权限写操作 **Files:** - Modify access repository/service/control request/result classes. - Test: role management controller/service tests. **Interfaces:** - Produces: `POST /api/admin/roles` - Produces: `PUT /api/admin/roles/{roleId}` - Produces: `POST /api/admin/roles/{roleId}/enable` - Produces: `POST /api/admin/roles/{roleId}/disable` - Produces: `PUT /api/admin/roles/{roleId}/permissions` - [x] Implement custom role create/edit/status changes. - [x] Reject edits to built-in role permissions. - [x] Implement permission overwrite for custom roles. - [x] Record admin audit for every write operation. - [x] Add tests for built-in role rejection and custom role updates. ### Task 7: CP4-4 菜单和酒店写操作 **Files:** - Modify navigation repository/service/control request/result classes. - Modify hotel repository/service/control request/result classes. - Test: menu and hotel management controller/service tests. **Interfaces:** - Produces: `POST /api/admin/menus` - Produces: `PUT /api/admin/menus/{menuId}` - Produces: `PUT /api/admin/menus/sort-order` - Produces: `GET /api/admin/menu-route-options` - Produces: `POST /api/admin/hotels` - Produces: `PUT /api/admin/hotels/{hotelId}` - Produces: `POST /api/admin/hotels/{hotelId}/enable` - Produces: `POST /api/admin/hotels/{hotelId}/disable` - [x] Implement menu create/edit/sort with enabled permission validation. - [x] Allow unknown route persistence while returning route safety hints. - [x] Implement hotel create as DISABLED and reject hotel_id edits. - [x] Reject enabling second ACTIVE hotel and disabling last ACTIVE hotel. - [x] Record admin audit for every write operation. - [x] Add tests for menu unknown route and hotel single-active constraints. ### Task 8: Full verification, docs, review and commit **Files:** - Modify: `docs/project/requirements/M006-system-admin-management-console-v1.md` - Modify: front-back communication docs if API contracts change. - [x] Update M006 document with implemented endpoints and remaining later work. - [x] Run backend focused tests and full backend test when feasible. - [x] Run frontend typecheck and test. - [x] Perform code review focused on security, permissions, audit and data consistency. - [x] Stage only M006-related files. - [x] Commit with Chinese commit message.