From 0b5af874ca66807f509b6bdee20c71c9ccde6529 Mon Sep 17 00:00:00 2001 From: JiaoTianBo Date: Fri, 27 Mar 2026 16:11:25 +0800 Subject: [PATCH] =?UTF-8?q?feat(core):=20=E6=96=B0=E5=A2=9E=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E5=8F=8A=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD=E7=9A=84?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=AE=BF=E9=97=AE=E5=B1=82=E5=92=8C=E6=9D=83?= =?UTF-8?q?=E9=99=90=E6=8E=A7=E5=88=B6=E5=88=87=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加多个Mapper接口及XML文件支持项目、成员、里程碑、任务、风险、资源、 文件附件等模块的数据操作和查询功能,支持复杂查询与统计 - 新增Sa-Token权限配置,集成统一认证管理 - 引入权限常量类,定义系统角色、项目角色及权限编码标准 - 新增项目权限校验切面,实现基于注解的项目权限和角色校验逻辑 - 更新配置文件和依赖,集成MyBatis Plus、MinIO、Spring AI及文档解析相关库 - 调整MyBatis配置的类型别名包路径,统一领域实体引用路径 --- pom.xml | 6 ++++ .../aspect/ProjectPermissionAspect.java | 15 +++++----- src/main/resources/application-dev.yaml | 30 +++++++++---------- src/main/resources/application.yaml | 4 +-- 4 files changed, 31 insertions(+), 24 deletions(-) diff --git a/pom.xml b/pom.xml index 0b73e85..ed2782f 100644 --- a/pom.xml +++ b/pom.xml @@ -40,6 +40,12 @@ lombok + + + org.springframework.boot + spring-boot-starter-aop + + cn.hutool diff --git a/src/main/java/cn/yinlihupo/common/aspect/ProjectPermissionAspect.java b/src/main/java/cn/yinlihupo/common/aspect/ProjectPermissionAspect.java index ccc7297..75b4862 100644 --- a/src/main/java/cn/yinlihupo/common/aspect/ProjectPermissionAspect.java +++ b/src/main/java/cn/yinlihupo/common/aspect/ProjectPermissionAspect.java @@ -2,6 +2,7 @@ package cn.yinlihupo.common.aspect; import cn.yinlihupo.common.annotation.RequireProjectPermission; import cn.yinlihupo.common.annotation.RequireProjectRole; +import cn.yinlihupo.common.enums.ErrorCode; import cn.yinlihupo.common.exception.BusinessException; import cn.yinlihupo.common.util.SecurityUtils; import cn.yinlihupo.service.system.ProjectPermissionService; @@ -41,7 +42,7 @@ public class ProjectPermissionAspect { Long userId = SecurityUtils.getCurrentUserId(); if (userId == null) { - throw new BusinessException(403, "用户未登录"); + throw new BusinessException(ErrorCode.NOT_LOGIN_ERROR, "用户未登录"); } // 管理员直接放行 @@ -52,7 +53,7 @@ public class ProjectPermissionAspect { // 获取项目ID Long projectId = extractProjectId(joinPoint, annotation.projectIdParam()); if (projectId == null) { - throw new BusinessException(400, "无法获取项目ID"); + throw new BusinessException(ErrorCode.PARAMS_ERROR, "无法获取项目ID"); } // 校验权限 @@ -61,7 +62,7 @@ public class ProjectPermissionAspect { if (!hasPermission) { log.warn("用户 [{}] 没有项目 [{}] 的权限 [{}]", userId, projectId, requiredPermission); - throw new BusinessException(403, annotation.message()); + throw new BusinessException(ErrorCode.FORBIDDEN_ERROR, annotation.message()); } } @@ -76,7 +77,7 @@ public class ProjectPermissionAspect { Long userId = SecurityUtils.getCurrentUserId(); if (userId == null) { - throw new BusinessException(403, "用户未登录"); + throw new BusinessException(ErrorCode.NOT_LOGIN_ERROR, "用户未登录"); } // 管理员直接放行(如果允许) @@ -87,13 +88,13 @@ public class ProjectPermissionAspect { // 获取项目ID Long projectId = extractProjectId(joinPoint, annotation.projectIdParam()); if (projectId == null) { - throw new BusinessException(400, "无法获取项目ID"); + throw new BusinessException(ErrorCode.PARAMS_ERROR, "无法获取项目ID"); } // 获取用户项目角色 String userRole = projectPermissionService.getUserProjectRole(userId, projectId); if (userRole == null) { - throw new BusinessException(403, "您不是该项目的成员"); + throw new BusinessException(ErrorCode.FORBIDDEN_ERROR, "您不是该项目的成员"); } // 校验角色 @@ -109,7 +110,7 @@ public class ProjectPermissionAspect { if (!hasRole) { log.warn("用户 [{}] 在项目 [{}] 中的角色 [{}] 不符合要求 {}", userId, projectId, userRole, requiredRoles); - throw new BusinessException(403, annotation.message()); + throw new BusinessException(ErrorCode.FORBIDDEN_ERROR, annotation.message()); } } diff --git a/src/main/resources/application-dev.yaml b/src/main/resources/application-dev.yaml index 3b5e3bf..228ab06 100644 --- a/src/main/resources/application-dev.yaml +++ b/src/main/resources/application-dev.yaml @@ -16,20 +16,6 @@ spring: idle-timeout: 300000 connection-timeout: 20000 - # MyBatis Plus 配置 - mybatis-plus: - mapper-locations: classpath*:/mapper/**/*.xml - type-aliases-package: cn.yinlihupo.domain.entity - configuration: - map-underscore-to-camel-case: true - log-impl: org.apache.ibatis.logging.stdout.StdOutImpl - global-config: - db-config: - id-type: auto - logic-delete-field: deleted - logic-delete-value: 1 - logic-not-delete-value: 0 - ai: openai: api-key: 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 @@ -45,9 +31,23 @@ minio: secret-key: minioadmin bucket-name: ylhp-files +# MyBatis Plus 配置 +mybatis-plus: + mapper-locations: classpath*:/mapper/**/*.xml + type-aliases-package: cn.yinlihupo.domain.entity + configuration: + map-underscore-to-camel-case: true + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + global-config: + db-config: + id-type: auto + logic-delete-field: deleted + logic-delete-value: 1 + logic-not-delete-value: 0 + # 日志配置 logging: level: root: INFO - cn.yinlihupo.ylhpaiprojectmanager: DEBUG + cn.yinlihupo: DEBUG org.springframework.web: DEBUG diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index dce7a6d..035a133 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -10,7 +10,7 @@ spring: # 公共配置 server: - port: 8080 + port: 8088 # Sa-Token 配置 sa-token: @@ -19,7 +19,7 @@ sa-token: # Token 有效期(单位:秒)默认30天,-1代表永不过期 timeout: 2592000 # Token 临时有效期(指定时间内无操作就视为token过期)单位:秒 - activity-timeout: -1 + active-timeout: -1 # 是否允许同一账号并发登录(为true时允许一起登录,为false时新登录挤掉旧登录) is-concurrent: true # 在多人登录同一账号时,是否共用一个token(为true时所有登录共用一个token,为false时每次登录新建一个token)