From ed4ec0b340c552b8b3a907cac9562edbc4525ede Mon Sep 17 00:00:00 2001 From: dhb52 Date: Mon, 6 May 2024 00:36:16 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=8A=BD=E5=8F=96UserSessionUtils.?= =?UTF-8?q?getGroupNames=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/service/impl/JobBatchServiceImpl.java | 52 ++++++------------- .../server/web/util/UserSessionUtils.java | 42 ++++++++++++++- 2 files changed, 55 insertions(+), 39 deletions(-) diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/JobBatchServiceImpl.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/JobBatchServiceImpl.java index 1efd7fd61..fe1b90c59 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/JobBatchServiceImpl.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/JobBatchServiceImpl.java @@ -15,7 +15,6 @@ import com.aizuda.snailjob.server.web.service.JobBatchService; import com.aizuda.snailjob.server.web.service.convert.JobBatchResponseVOConverter; import com.aizuda.snailjob.server.web.service.handler.JobHandler; import com.aizuda.snailjob.server.web.util.UserSessionUtils; -import com.aizuda.snailjob.template.datasource.persistence.dataobject.JobBatchQueryDO; import com.aizuda.snailjob.template.datasource.persistence.dataobject.JobBatchResponseDO; import com.aizuda.snailjob.template.datasource.persistence.mapper.JobMapper; import com.aizuda.snailjob.template.datasource.persistence.mapper.JobTaskBatchMapper; @@ -23,16 +22,14 @@ import com.aizuda.snailjob.template.datasource.persistence.mapper.WorkflowNodeMa import com.aizuda.snailjob.template.datasource.persistence.po.Job; import com.aizuda.snailjob.template.datasource.persistence.po.JobTaskBatch; import com.aizuda.snailjob.template.datasource.persistence.po.WorkflowNode; -import com.aizuda.snailjob.server.web.service.convert.JobBatchResponseVOConverter; -import com.aizuda.snailjob.server.web.service.handler.JobHandler; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.CollectionUtils; +import java.util.Collections; import java.util.List; import java.util.Objects; @@ -52,47 +49,28 @@ public class JobBatchServiceImpl implements JobBatchService { @Override public PageResult> getJobBatchPage(final JobBatchQueryVO queryVO) { - PageDTO pageDTO = new PageDTO<>(queryVO.getPage(), queryVO.getSize()); UserSessionVO userSessionVO = UserSessionUtils.currentUserSession(); - List groupNames = Lists.newArrayList(); - if (userSessionVO.isUser()) { - groupNames = userSessionVO.getGroupNames(); + List groupNames = UserSessionUtils.getGroupNames(queryVO.getGroupName()); + + // 如果当前用户为普通用户, 且计算后组名条件为空, 不能查询 + if (userSessionVO.isUser() && CollUtil.isEmpty(groupNames)) { + return new PageResult<>(pageDTO, Collections.emptyList()); } - if (StrUtil.isNotBlank(queryVO.getGroupName())) { - // 说明当前组不在用户配置的权限中 - if (!CollectionUtils.isEmpty(groupNames) && !groupNames.contains(queryVO.getGroupName())) { - return new PageResult<>(pageDTO, Lists.newArrayList()); - } else { - groupNames = Lists.newArrayList(queryVO.getGroupName()); - } - } - - JobBatchQueryDO queryDO = new JobBatchQueryDO(); - if (StrUtil.isNotBlank(queryVO.getJobName())) { - queryDO.setJobName(queryVO.getJobName() + "%"); - } - - queryDO.setJobId(queryVO.getJobId()); - queryDO.setTaskBatchStatus(queryVO.getTaskBatchStatus()); - queryDO.setGroupNames(groupNames); - queryDO.setNamespaceId(userSessionVO.getNamespaceId()); QueryWrapper wrapper = new QueryWrapper() - .eq("a.namespace_id", queryDO.getNamespaceId()) - .eq("a.system_task_type", 3) - .eq(queryDO.getJobId() != null, "a.job_id", queryDO.getJobId()) - .in(CollUtil.isNotEmpty(queryDO.getGroupNames()), "a.group_name", queryDO.getGroupNames()) - .eq(queryDO.getTaskBatchStatus() != null, "task_batch_status", queryDO.getTaskBatchStatus()) - .eq(StrUtil.isNotBlank(queryDO.getJobName()), "job_name", queryDO.getJobName()) - .eq("a.deleted", 0) - .orderByDesc("a.id"); + .eq("a.namespace_id", userSessionVO.getNamespaceId()) + .eq("a.system_task_type", SyetemTaskTypeEnum.JOB.getType()) + .eq(queryVO.getJobId() != null, "a.job_id", queryVO.getJobId()) + .in(CollUtil.isNotEmpty(groupNames), "a.group_name", groupNames) + .eq(queryVO.getTaskBatchStatus() != null, "task_batch_status", queryVO.getTaskBatchStatus()) + .likeRight(StrUtil.isNotBlank(queryVO.getJobName()), "job_name", queryVO.getJobName()) + .eq("a.deleted", 0) + .orderByDesc("a.id"); List batchResponseDOList = jobTaskBatchMapper.selectJobBatchPageList(pageDTO, wrapper); - List batchResponseVOList = JobBatchResponseVOConverter.INSTANCE.toJobBatchResponseVOs( - batchResponseDOList); - + batchResponseDOList); return new PageResult<>(pageDTO, batchResponseVOList); } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/util/UserSessionUtils.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/util/UserSessionUtils.java index 8e51d5ce5..0fada51b3 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/util/UserSessionUtils.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/util/UserSessionUtils.java @@ -1,11 +1,15 @@ package com.aizuda.snailjob.server.web.util; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.aizuda.snailjob.server.web.model.request.UserSessionVO; -import com.aizuda.snailjob.server.web.model.request.UserSessionVO; +import com.google.common.collect.Lists; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; -import jakarta.servlet.http.HttpServletRequest; +import java.util.Collections; +import java.util.List; /** * @author opensnail @@ -18,4 +22,38 @@ public final class UserSessionUtils { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); return (UserSessionVO) request.getAttribute("currentUser"); } + + /** + * 计算用户组权限及组名查询条件的组合结果 + * 1. 普通用户: + * 1.1 查询条件为空, 返回用户的组权限 + * 1.2 查询条件不为空,返回用户的组权限与查询条件交集 + * 2. 管理员: + * 2.1 查询条件为空, 返回空 + * 2.2 查询条件不为空, 返回查询条件组名 + * + * @param groupNameQuery 组名查询条件 + * @return 用户组查询集合 + */ + public static List getGroupNames(String groupNameQuery) { + UserSessionVO userSessionVO = currentUserSession(); + if (userSessionVO.isUser()) { // 普通用户 + List groupNames = userSessionVO.getGroupNames(); + if (CollUtil.isNotEmpty(groupNames)) { + if (StrUtil.isNotBlank(groupNameQuery)) { + if (groupNames.contains(groupNameQuery)) { + return Lists.newArrayList(groupNameQuery); + } + } else { + return groupNames; + } + } + } else { // 管理员 + if (StrUtil.isNotBlank(groupNameQuery)) { + return Lists.newArrayList(groupNameQuery); + } + } + + return Collections.emptyList(); + } }