diff --git a/ruoyi-admin/src/main/java/com/ruoyi/project/controller/BizDocController.java b/ruoyi-admin/src/main/java/com/ruoyi/project/controller/BizDocController.java index 2f83854..73150f4 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/project/controller/BizDocController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/project/controller/BizDocController.java @@ -29,6 +29,8 @@ import com.ruoyi.project.domain.BizProject; import com.ruoyi.project.service.IBizProjectService; import com.ruoyi.common.utils.StringUtils; import java.net.URLEncoder; +import com.ruoyi.system.service.ISysUserService; +import com.ruoyi.common.core.domain.entity.SysUser; /** * 文档Controller @@ -49,6 +51,9 @@ public class BizDocController extends BaseController @Autowired private IBizModuleService bizModuleService; + @Autowired + private ISysUserService sysUserService; + /** * 查询文档列表 */ @@ -159,15 +164,50 @@ public class BizDocController extends BaseController Long currentUserId = getUserId(); if ("0".equals(kindType)) { - // 项目文档:只有项目管理员可以上传 + // 项目文档:项目管理员 或 项目参与者(该项目下任一模块的接取人/被指派人)可上传 BizProject project = bizProjectService.selectBizProjectByProjectId(projectId); - if (!project.getOwnerId().equals(currentUserId)) { + boolean isOwner = project != null && project.getOwnerId() != null && project.getOwnerId().equals(currentUserId); + boolean isParticipant = false; + if (!isOwner) { + // 参与者判断:当前用户是否在该项目下拥有被指派的模块 + com.ruoyi.models.domain.BizModule query = new com.ruoyi.models.domain.BizModule(); + query.setProjectId(projectId); + java.util.List modules = bizModuleService.selectBizModuleList(query); + if (modules != null) { + for (com.ruoyi.models.domain.BizModule m : modules) { + if (m.getAssignee() != null && (m.getAssignee().equals(String.valueOf(currentUserId)) || m.getAssignee().equals(getUsername()))) { + isParticipant = true; break; + } + } + } + } + if (!isOwner && !isParticipant) { return AjaxResult.error("无权上传项目文档"); } } else if ("1".equals(kindType)) { - // 模块文档:只有被指派该模块的用户可以上传 + // 模块文档:只有接取人可以上传(兼容历史:assignee 可能保存为用户ID/用户名/昵称) BizModule module = bizModuleService.selectBizModuleByModuleId(moduleId); - if (!String.valueOf(currentUserId).equals(module.getAssignee())) { + if (module == null) { + return AjaxResult.error("模块不存在"); + } + String assignee = module.getAssignee(); + boolean allowed = false; + // 1) 与当前用户ID字符串相等(历史ID保存) + if (String.valueOf(currentUserId).equals(assignee)) { + allowed = true; + } else { + try { + SysUser u = sysUserService.selectUserById(currentUserId); + if (u != null) { + if (StringUtils.isNotEmpty(u.getUserName()) && u.getUserName().equals(assignee)) { + allowed = true; + } else if (StringUtils.isNotEmpty(u.getNickName()) && u.getNickName().equals(assignee)) { + allowed = true; + } + } + } catch (Exception ignored) {} + } + if (!allowed) { return AjaxResult.error("无权上传此模块文档"); } } diff --git a/ruoyi-admin/src/main/resources/application-druid.yml b/ruoyi-admin/src/main/resources/application-druid.yml index 8ac5e23..215efd2 100644 --- a/ruoyi-admin/src/main/resources/application-druid.yml +++ b/ruoyi-admin/src/main/resources/application-druid.yml @@ -6,7 +6,7 @@ spring: druid: # 主库数据源 master: - url: jdbc:mysql://127.0.0.1:n3306/managersystem?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 + url: jdbc:mysql://127.0.0.1:3306/managersystem?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: Wxit11335577 # 从库数据源 diff --git a/ruoyi-ui/src/views/project/doc/index.vue b/ruoyi-ui/src/views/project/doc/index.vue index 88e8f8a..bc8a619 100644 --- a/ruoyi-ui/src/views/project/doc/index.vue +++ b/ruoyi-ui/src/views/project/doc/index.vue @@ -100,7 +100,7 @@ - 项目文档 + 项目文档 模块文档 @@ -135,9 +135,9 @@
文档类型:{{ upload.meta.kindType === 1 ? '模块文档' : '项目文档' }}
- 所属项目:{{ (projectOptions.find(p=>p.projectId===upload.meta.projectId)||{}).projectName || '-' }}
+ 所属项目:{{ (projectOptions.find(p=>String(p.projectId)===String(upload.meta.projectId))||{}).projectName || '-' }}