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 1efd7fd6..9230a0e0 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 @@ -1,6 +1,5 @@ package com.aizuda.snailjob.server.web.service.impl; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.aizuda.snailjob.common.core.constant.SystemConstants; import com.aizuda.snailjob.common.core.util.JsonUtil; @@ -15,7 +14,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,15 +21,12 @@ 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.List; import java.util.Objects; @@ -52,46 +47,24 @@ 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(); + if (!UserSessionUtils.hasGroupPermission(queryVO.getGroupName())) { + return new PageResult<>(pageDTO, Lists.newArrayList()); } - 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()) + .eq(StrUtil.isNotBlank(queryVO.getGroupName()), "a.group_name", queryVO.getGroupName()) + .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 8e51d5ce..0a79081d 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,12 +1,12 @@ 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 jakarta.servlet.http.HttpServletRequest; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; -import jakarta.servlet.http.HttpServletRequest; - /** * @author opensnail * @date 2023-11-22 23:14:53 @@ -18,4 +18,23 @@ public final class UserSessionUtils { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); return (UserSessionVO) request.getAttribute("currentUser"); } + + /** + * 判断当前用户是否具备组权限 + * + * @param groupName 组名称 + * @return true, 具备权限,否则返回false + */ + public static boolean hasGroupPermission(String groupName) { + if (StrUtil.isBlank(groupName)) { + return true; + } + + UserSessionVO userSessionVO = currentUserSession(); + if (userSessionVO.isUser() && CollUtil.isNotEmpty(userSessionVO.getGroupNames())) { + return userSessionVO.getGroupNames().contains(groupName); + } + + return false; + } }