# smart_ticket_system **Repository Path**: i-am-programmer-001/smart_ticket_system ## Basic Information - **Project Name**: smart_ticket_system - **Description**: 实习项目基于 Spring Boot + RBAC 后端的轻量级 ITSM 工单管理系统,覆盖用户认证、工单全生命周期、状态流转、评论通知、附件管理与权限隔离 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 2 - **Created**: 2025-07-18 - **Last Updated**: 2025-12-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## ✅ 一、完成的功能后端 | 模块 | 状态 | 说明 | | :---------- | :--- | :--------------------------------------------- | | 用户认证 | ✅ | JWT登录、注册、刷新、退出、修改密码 | | 权限控制 | ✅ | 基于角色的访问控制(RBAC),支持方法级注解权限 | | 工单系统 | ✅ | 创建、指派、状态流转、评论、附件上传 | | 通知系统 | ✅ | 支持未读/已读、全部已读 | | 文件上传 | ✅ | 支持工单/评论附件,按日期分目录存储 | | 接口文档 | ✅ | Swagger3(OpenAPI)已集成 | | 数据安全 | ✅ | 密码加密、逻辑删除、JWT黑名单 | | 分页 & 排序 | ✅ | MyBatis-Plus 分页插件已配置 | ------ ## ✅ 二、功能清单(已实现) | 模块 | 功能点 | 接口示例 | | :----- | :------------------------------------ | :--------------------- | | 🔐 认证 | 注册、登录、刷新token、退出、修改密码 | `/auth/login` | | 👤 用户 | 分页查询、启用/禁用、绑定角色 | `/admin/users` | | 🎭 角色 | 列表、分配权限 | `/admin/roles` | | 🔑 权限 | 列表(Admin) | `/permission/list` | | 📨 工单 | 创建、详情、列表、指派、修改状态 | `/ticket` | | 💬 评论 | 新增、列表、删除 | `/comment` | | 📎 附件 | 上传、按工单/评论查询、删除 | `/attachment/upload` | | 🔔 通知 | 创建、未读列表、全部已读 | `/notification/unread` | | 📜 日志 | 工单状态流转记录 | `/ticket/{id}/flow` | ## ✅ 三、技术栈总结 | 类别 | 技术 | 用途 | | :----- | :------------------------- | :------------------ | | 框架 | Spring Boot 3.x | 核心框架 | | 安全 | Spring Security + JWT | 认证与授权 | | 数据 | MyBatis-Plus | ORM、分页、逻辑删除 | | 数据库 | MySQL | 实体设计规范 | | 工具 | Hutool | 文件、ID、Bean 拷贝 | | 文档 | Swagger3 | 接口文档 | | 加密 | BCrypt | 密码加密 | | 上传 | 本地文件系统 | 按日期分目录存储 | | 配置 | `@ConfigurationProperties` | 类型安全配置 | ## ✅ 四、权限问题清单(需要解决) | 位置 | 问题描述 | 风险等级 | 修复建议 | | :-------------------------- | :------------------------------------------- | :------- | :------------------------- | | `TicketController.java` | `detail` 方法权限注解被注释掉 | 🔴 高 | 任何登录用户都能看任意工单 | | `TicketController.java` | `updateStatus` 方法权限注解被注释掉 | 🔴 高 | 任何用户都能改状态 | | `TicketController.java` | `list` 方法返回 **全部工单** | 🟠 中 | 普通用户看到了别人的工单 | | `CommentController.java` | `deleteComment` 无作者校验 | 🟠 中 | 用户可以删别人的评论 | | `AttachmentController.java` | `delete` 仅校验 `operatorId`,未校验附件归属 | 🟡 低 | 用户可以删别人的附件 | | `TicketServiceImpl.java` | `assign` / `updateStatus` 无角色或归属校验 | 🟡 低 | 逻辑完整,但依赖上层控制器 |