diff --git a/Jenkinsfile b/Jenkinsfile index 21efddb..c3959a7 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,21 +1,24 @@ pipeline { - environment { - QODANA_TOKEN=credentials('eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJvcmdhbml6YXRpb24iOiJwNTZYRyIsInByb2plY3QiOiIzd1JQNyIsInRva2VuIjoiQWFxVkoifQ.R3TH0E2LgVpBorJ1wyIx3zjIM1p4j-taEEShZKhH2l8') - } - agent { - docker { - args ''' - -v "${WORKSPACE}":/data/project - --entrypoint="" - ''' - image 'jetbrains/qodana-' - } - } - stages { - stage('Qodana') { - steps { - sh '''qodana''' - } - } - } + environment { + QODANA_TOKEN = credentials('eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJvcmdhbml6YXRpb24iOiJwNTZYRyIsInByb2plY3QiOiIzd1JQNyIsInRva2VuIjoiQWFxVkoifQ.R3TH0E2LgVpBorJ1wyIx3zjIM1p4j-taEEShZKhH2l8') + } + agent { + docker { + args ''' + -v "${WORKSPACE}":/data/project + --entrypoint="" + ''' + image 'jetbrains/qodana-jvm' + } + } + stages { + stage('Qodana') { + when { + branch 'feature' + } + steps { + sh '''qodana''' + } + } + } } \ No newline at end of file diff --git a/qodana.yaml b/qodana.yaml new file mode 100644 index 0000000..e43be70 --- /dev/null +++ b/qodana.yaml @@ -0,0 +1,31 @@ +#-------------------------------------------------------------------------------# +# Qodana analysis is configured by qodana.yaml file # +# https://www.jetbrains.com/help/qodana/qodana-yaml.html # +#-------------------------------------------------------------------------------# +version: "1.0" +#Specify inspection profile for code analysis +profile: + name: qodana.starter +#Enable inspections +#include: +# - name: +#Disable inspections +#exclude: +# - name: +# paths: +# - +projectJDK: 17 #(Applied in CI/CD pipeline) +#Execute shell command before Qodana execution (Applied in CI/CD pipeline) +#bootstrap: sh ./prepare-qodana.sh +#Install IDE plugins before Qodana execution (Applied in CI/CD pipeline) +#plugins: +# - id: #(plugin id can be found at https://plugins.jetbrains.com) +#Specify Qodana linter for analysis (Applied in CI/CD pipeline) +linter: jetbrains/qodana-jvm:latest +include: + - name: ClassLoaderInstantiation + - name: NonThreadSafeLazyInitialization + - name: DoubleBraceInitialization + - name: JavaLangImport + - name: UNUSED_IMPORT + - name: SamePackageImport diff --git a/src/main/java/com/jsl/oa/services/MailService.java b/src/main/java/com/jsl/oa/services/MailService.java index b8f48a9..61a089d 100755 --- a/src/main/java/com/jsl/oa/services/MailService.java +++ b/src/main/java/com/jsl/oa/services/MailService.java @@ -18,9 +18,8 @@ public interface MailService { * @param sendTo 收件人 * @param subject 主题 * @param text 内容 - * @return 是否发送成功 */ - boolean sendMail(String sendTo, String subject, String text); + void sendMail(String sendTo, String subject, String text); /** *

发送邮件通用模板

@@ -29,9 +28,8 @@ public interface MailService { * * @param sendTo 收件人 * @param model 模板 - * @return 是否发送成功 */ - boolean sendMail(String sendTo, String model); + void sendMail(String sendTo, String model); /** *

邮件登陆模块

diff --git a/src/main/java/com/jsl/oa/services/impl/InfoServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/InfoServiceImpl.java index 657971d..18d7522 100644 --- a/src/main/java/com/jsl/oa/services/impl/InfoServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/InfoServiceImpl.java @@ -15,6 +15,7 @@ import com.jsl.oa.utils.Processing; import com.jsl.oa.utils.ResultUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; @@ -41,12 +42,8 @@ public class InfoServiceImpl implements InfoService { @Override @CheckUserHasPermission("info.image.add") - public BaseResponse addHeaderImage(HttpServletRequest request, CarouselVO carouselVO) { + public BaseResponse addHeaderImage(HttpServletRequest request, @NotNull CarouselVO carouselVO) { log.info("\t> 执行 Service 层 InfoService.addHeaderImage 方法"); - // 用户权限校验 - if (!Processing.checkUserIsAdmin(request, roleMapper)) { - return ResultUtil.error(ErrorCode.NOT_ADMIN); - } // 获取用户 Long userId = Processing.getAuthHeaderToUserId(request); UserDO userDO = userDAO.getUserById(userId); @@ -71,12 +68,9 @@ public class InfoServiceImpl implements InfoService { } @Override + @CheckUserHasPermission("info.image.edit") public BaseResponse editHeaderImage(HttpServletRequest request, CarouselVO carouselVO, Integer id) { log.info("\t> 执行 Service 层 InfoService.editHeaderImage 方法"); - // 用户权限校验 - if (!Processing.checkUserIsAdmin(request, roleMapper)) { - return ResultUtil.error(ErrorCode.NOT_ADMIN); - } // 获取用户 Long userId = Processing.getAuthHeaderToUserId(request); UserDO userDO = userDAO.getUserById(userId); @@ -119,6 +113,7 @@ public class InfoServiceImpl implements InfoService { } @Override + @CheckUserHasPermission("info.image.del") public BaseResponse delHeaderImage(HttpServletRequest request, Integer id) { log.info("\t> 执行 Service 层 InfoService.delHeaderImage 方法"); // 用户权限校验 @@ -141,6 +136,7 @@ public class InfoServiceImpl implements InfoService { } @Override + @CheckUserHasPermission("info.image.setting.edit") public BaseResponse editSettingHeaderImage(HttpServletRequest request, Boolean showType) { log.info("\t> 执行 Service 层 InfoService.editSettingHeaderImage 方法"); // 用户权限校验 diff --git a/src/main/java/com/jsl/oa/services/impl/MailServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/MailServiceImpl.java index 325a138..9a3380e 100755 --- a/src/main/java/com/jsl/oa/services/impl/MailServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/MailServiceImpl.java @@ -1,5 +1,6 @@ package com.jsl.oa.services.impl; +import com.jsl.oa.annotations.CheckUserAbleToUse; import com.jsl.oa.services.MailService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -37,7 +38,9 @@ public class MailServiceImpl implements MailService { private String from; @Override - public boolean sendMail(String sendTo, String subject, String text) { + @Async + @CheckUserAbleToUse + public void sendMail(String sendTo, String subject, String text) { log.info("\t> 执行 Service 层 MailService.sendMail 方法"); //发送多媒体邮件 try { @@ -51,23 +54,23 @@ public class MailServiceImpl implements MailService { javaMailSender.send(message); log.info("\t> 发送邮件 {} 标题 {} 成功", sendTo, subject); - return true; } catch (MessagingException e) { //TODO: 10001-发送邮件失败处理 log.error("\t> 邮件发送失败", e); - return false; } } @Override - public boolean sendMail(String sendTo, String model) { + @Async + @CheckUserAbleToUse + public void sendMail(String sendTo, String model) { log.info("\t> 执行 Service 层 MailService.sendMail 方法"); - return false; } @Override @Async + @CheckUserAbleToUse public void sendMailAboutUserLogin(String email, Integer code) { log.info("\t> 执行 Service 层 MailService.sendMailAboutUserLogin 方法"); // 发送邮件带HTML模块部分 diff --git a/src/main/java/com/jsl/oa/services/impl/MessageServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/MessageServiceImpl.java index cded109..d80a481 100644 --- a/src/main/java/com/jsl/oa/services/impl/MessageServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/MessageServiceImpl.java @@ -1,12 +1,17 @@ package com.jsl.oa.services.impl; +import com.jsl.oa.annotations.CheckUserAbleToUse; +import com.jsl.oa.annotations.CheckUserHasPermission; import com.jsl.oa.mapper.MessageMapper; import com.jsl.oa.mapper.RoleMapper; import com.jsl.oa.model.doData.MessageDO; import com.jsl.oa.model.doData.PageBeanDO; import com.jsl.oa.services.MessageService; -import com.jsl.oa.utils.*; +import com.jsl.oa.utils.BaseResponse; +import com.jsl.oa.utils.ErrorCode; +import com.jsl.oa.utils.JwtUtil; +import com.jsl.oa.utils.ResultUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -16,6 +21,15 @@ import java.time.LocalDate; import java.util.List; +/** + *

消息服务层实现类

+ *
+ * 用于消息服务层的实现类 + * + * @author xiao_lfeng | xiangZr-hhh | 176yunxuan + * @version v1.1.0 + * @since v1.1.0 + */ @Slf4j @Service @RequiredArgsConstructor @@ -25,6 +39,7 @@ public class MessageServiceImpl implements MessageService { private final RoleMapper roleMapper; @Override + @CheckUserHasPermission("message.delete") public BaseResponse messageDelete(Long mid, HttpServletRequest request) { //获取消息数据 MessageDO messageDO = messageMapper.getMessageById(mid); @@ -41,6 +56,7 @@ public class MessageServiceImpl implements MessageService { } @Override + @CheckUserAbleToUse public BaseResponse messageGet(LocalDate begin, LocalDate end, Long page, Long pageSize, Long uid) { //1.记录总数据数 Long count = messageMapper.count(uid); @@ -60,27 +76,24 @@ public class MessageServiceImpl implements MessageService { } @Override + @CheckUserHasPermission("message.get") public BaseResponse messageGetAll(HttpServletRequest request, LocalDate begin, LocalDate end, Long page, Long pageSize, Long loginId, Long uid) { log.info("请求接口服务层"); - if (!Processing.checkUserIsAdmin(request, roleMapper)) { - return ResultUtil.error(ErrorCode.NOT_ADMIN); - } else { - //1.记录总数据数 - Long count = messageMapper.count(uid); + //1.记录总数据数 + Long count = messageMapper.count(uid); - //2.获取分页数据列表 - //默认获取时间为最近30天 - if (begin == null) { - begin = LocalDate.now(); - end = begin.minusDays(30); - } - Long start = (page - 1) * pageSize; - List messageDOList = messageMapper.page(begin, end, uid, start, pageSize); - - //3.封装PageBean对象 - PageBeanDO pageBean = new PageBeanDO<>(count, messageDOList); - return ResultUtil.success(pageBean); + //2.获取分页数据列表 + //默认获取时间为最近30天 + if (begin == null) { + begin = LocalDate.now(); + end = begin.minusDays(30); } + Long start = (page - 1) * pageSize; + List messageDOList = messageMapper.page(begin, end, uid, start, pageSize); + + //3.封装PageBean对象 + PageBeanDO pageBean = new PageBeanDO<>(count, messageDOList); + return ResultUtil.success(pageBean); } diff --git a/src/main/java/com/jsl/oa/services/impl/NewsServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/NewsServiceImpl.java index 4ff20a4..9707148 100644 --- a/src/main/java/com/jsl/oa/services/impl/NewsServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/NewsServiceImpl.java @@ -1,6 +1,7 @@ package com.jsl.oa.services.impl; +import com.jsl.oa.annotations.CheckUserHasPermission; import com.jsl.oa.dao.NewsDAO; import com.jsl.oa.model.doData.NewsDO; import com.jsl.oa.model.voData.NewsAddVO; @@ -11,10 +12,21 @@ import com.jsl.oa.utils.Processing; import com.jsl.oa.utils.ResultUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; +/** + *

新闻服务层实现类

+ *
+ * 用于新闻服务层的实现类 + * + * @since v1.1.0 + * @version v1.1.0 + * @see com.jsl.oa.services.NewsService + * @author xiao_lfeng | xiangZr-hhh | 176yunxuan + */ @Slf4j @Service @RequiredArgsConstructor @@ -23,16 +35,17 @@ public class NewsServiceImpl implements NewsService { private final NewsDAO newsDAO; @Override - public BaseResponse newsAdd(NewsAddVO newsAddVO, HttpServletRequest request) { + @CheckUserHasPermission("news.add") + public BaseResponse newsAdd(NewsAddVO newsAddVO, @NotNull HttpServletRequest request) { log.info("\t> 执行 Service 层 NewsService.newsAdd 方法"); -// 拷贝新闻数据到实体类 + // 拷贝新闻数据到实体类 NewsDO newsDO = new NewsDO(); - Processing.copyProperties(newsAddVO,newsDO); -// 获取现在的用户id + Processing.copyProperties(newsAddVO, newsDO); + // 获取现在的用户id String token = request.getHeader("Authorization").replace("Bearer ", ""); Long uid = JwtUtil.getUserId(token); -// 添加新闻数据 - newsDAO.addNews(newsDO,uid); + // 添加新闻数据 + newsDAO.addNews(newsDO, uid); return ResultUtil.success(); } diff --git a/src/main/java/com/jsl/oa/services/impl/ProjectServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/ProjectServiceImpl.java index af2289d..c2aee5f 100644 --- a/src/main/java/com/jsl/oa/services/impl/ProjectServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/ProjectServiceImpl.java @@ -1,11 +1,10 @@ package com.jsl.oa.services.impl; +import com.jsl.oa.annotations.CheckUserHasPermission; import com.jsl.oa.dao.ProjectDAO; import com.jsl.oa.dao.UserDAO; -import com.jsl.oa.mapper.RoleMapper; import com.jsl.oa.model.doData.ProjectCuttingDO; import com.jsl.oa.model.doData.ProjectDO; -import com.jsl.oa.model.doData.ProjectUserDO; import com.jsl.oa.model.doData.UserDO; import com.jsl.oa.model.doData.info.ProjectShowDO; import com.jsl.oa.model.voData.ProjectCuttingAddVO; @@ -27,6 +26,16 @@ import java.sql.Timestamp; import java.util.ArrayList; import java.util.List; +/** + *

项目服务层实现类

+ *
+ * 用于项目服务层的实现类 + * + * @since v1.1.0 + * @version v1.1.0 + * @see com.jsl.oa.services.ProjectService + * @author xiao_lfeng | 176yunxuan | xiangZr-hhh + */ @Slf4j @Service @RequiredArgsConstructor @@ -34,31 +43,31 @@ public class ProjectServiceImpl implements ProjectService { private final ProjectDAO projectDAO; private final UserDAO userDAO; - private final RoleMapper roleMapper; @Override + @CheckUserHasPermission("project.add") public BaseResponse projectAdd(HttpServletRequest request, ProjectInfoVO projectAdd) { log.info("\t> 执行 Service 层 ProjectService.projectAdd 方法"); - if (Processing.checkUserIsAdmin(request, roleMapper)) { projectDAO.projectAdd(projectAdd); return ResultUtil.success("添加成功"); - } else return ResultUtil.error(ErrorCode.NOT_ADMIN); } @Override + @CheckUserHasPermission("project.edit") public BaseResponse projectEdit(HttpServletRequest request, @NotNull ProjectInfoVO projectEdit) { log.info("\t> 执行 Service 层 ProjectService.projectEdit 方法"); - if (Processing.checkUserIsAdmin(request, roleMapper)) { //判断项目是否存在 if (projectDAO.isExistProject(projectEdit.getId())) { projectDAO.projectEdit(projectEdit); return ResultUtil.success("修改成功"); - } else return ResultUtil.error(ErrorCode.PROJECT_NOT_EXIST); - } else return ResultUtil.error(ErrorCode.NOT_ADMIN); + } else { + return ResultUtil.error(ErrorCode.PROJECT_NOT_EXIST); + } } @Override + @CheckUserHasPermission("project.cutting.user.get") public BaseResponse projectGetUserInCutting(Long uid) { log.info("\t> 执行 Service 层 ProjectService.projectGetUserInCutting 方法"); if (userDAO.isExistUser(uid)) { @@ -70,14 +79,15 @@ public class ProjectServiceImpl implements ProjectService { } @Override + @CheckUserHasPermission("project.cutting.user.add") public BaseResponse projectAddUserForCutting(HttpServletRequest request, Long uid, Long pid) { log.info("\t> 执行 Service 层 ProjectService.projectAddUserForCutting 方法"); - if (Processing.checkUserIsAdmin(request, roleMapper)) { if (userDAO.isExistUser(uid)) { projectDAO.projectAddUserForCutting(uid, pid); return ResultUtil.success(); - } else return ResultUtil.error(ErrorCode.USER_NOT_EXIST); - } else return ResultUtil.error(ErrorCode.NOT_ADMIN); + } else { + return ResultUtil.error(ErrorCode.USER_NOT_EXIST); + } } @Override @@ -96,27 +106,24 @@ public class ProjectServiceImpl implements ProjectService { } @Override + @CheckUserHasPermission("info.project.add") public BaseResponse addHeader(HttpServletRequest request, ProjectShowVO projectShowVO) { log.info("\t> 执行 Service 层 InfoService.addHeader 方法"); - // 用户权限校验 - if (!Processing.checkUserIsAdmin(request, roleMapper)) { - return ResultUtil.error(ErrorCode.NOT_ADMIN); - } // 获取用户 Long userId = Processing.getAuthHeaderToUserId(request); UserDO userDO = userDAO.getUserById(userId); // 获取展示信息 ProjectShowDO projectShowDO = projectDAO.getHeader(); // 添加展示 - ProjectShowDO.DataDO project_show = new ProjectShowDO.DataDO(); - project_show.setDisplayOrder(projectShowVO.getDisplayOrder()) + ProjectShowDO.DataDO projectShow = new ProjectShowDO.DataDO(); + projectShow.setDisplayOrder(projectShowVO.getDisplayOrder()) .setName(projectShowVO.getName()) .setType(projectShowVO.getType()) .setStatus(projectShowVO.getStatus()) .setIsActive(projectShowVO.getIsActive()) .setAuthor(userDO.getUsername()) .setCreatedAt(new Timestamp(System.currentTimeMillis()).toString()); - projectShowDO.getData().add(project_show); + projectShowDO.getData().add(projectShow); // 保存展示 if (projectDAO.setProjectShow(projectShowDO)) { return ResultUtil.success(); @@ -126,12 +133,9 @@ public class ProjectServiceImpl implements ProjectService { } @Override + @CheckUserHasPermission("info.project.del") public BaseResponse delHeader(Integer id, HttpServletRequest request) { log.info("\t> 执行 Service 层 InfoService.delHeader 方法"); - // 用户权限校验 - if (!Processing.checkUserIsAdmin(request, roleMapper)) { - return ResultUtil.error(ErrorCode.NOT_ADMIN); - } // 获取展示信息 ProjectShowDO projectShowDO = projectDAO.getHeader(); // 删除指定展示id @@ -148,12 +152,9 @@ public class ProjectServiceImpl implements ProjectService { } @Override + @CheckUserHasPermission("info.project.edit") public BaseResponse editHeader(HttpServletRequest request, ProjectShowVO projectShowVO, Integer id) { log.info("\t> 执行 Service 层 InfoService.editHeader 方法"); - // 用户权限校验 - if (!Processing.checkUserIsAdmin(request, roleMapper)) { - return ResultUtil.error(ErrorCode.NOT_ADMIN); - } // 获取用户 Long userId = Processing.getAuthHeaderToUserId(request); UserDO userDO = userDAO.getUserById(userId); @@ -191,23 +192,26 @@ public class ProjectServiceImpl implements ProjectService { log.info("\t> 执行 Service 层 ProjectService.getByName 方法"); if (projectDAO.getByName(name) == null) { return ResultUtil.error(ErrorCode.PROJECT_NOT_EXIST); - } else return ResultUtil.success(projectDAO.getByName(name)); + } else { + return ResultUtil.success(projectDAO.getByName(name)); + } } @Override + @CheckUserHasPermission("project.delete") public BaseResponse projectDelete(HttpServletRequest request, Long id) { log.info("\t> 执行 Service 层 ProjectService.projectDelete 方法"); - if (Processing.checkUserIsAdmin(request, roleMapper)) { if (!projectDAO.projectDelete(id)) { return ResultUtil.error(ErrorCode.DATABASE_DELETE_ERROR); - } else return ResultUtil.success(); - } else return ResultUtil.error(ErrorCode.NOT_ADMIN); + } else { + return ResultUtil.success(); + } } @Override + @CheckUserHasPermission("project.cutting.add") public BaseResponse addProjectCutting(HttpServletRequest request, ProjectCuttingAddVO projectCuttingAddVO) { log.info("\t> 执行 Service 层 ProjectService.projectCuttingAdd方法"); - if (Processing.checkUserIsAdmin(request, roleMapper)) { //赋值数据 ProjectCuttingDO projectCuttingDO = new ProjectCuttingDO(); Processing.copyProperties(projectCuttingAddVO, projectCuttingDO); @@ -218,13 +222,12 @@ public class ProjectServiceImpl implements ProjectService { //向数据库添加数据 projectDAO.projectCuttingAdd(projectCuttingDO); return ResultUtil.success(); - } else return ResultUtil.error(ErrorCode.NOT_ADMIN); } @Override + @CheckUserHasPermission("project.cutting.edit") public BaseResponse editProjectCutting(HttpServletRequest request, ProjectCuttingEditVO projectCuttingEditVO) { log.info("\t> 执行 Service 层 ProjectService.projectCuttingEdit方法"); - if (Processing.checkUserIsAdmin(request, roleMapper)) { //赋值数据 ProjectCuttingDO projectCuttingDO = new ProjectCuttingDO(); Processing.copyProperties(projectCuttingEditVO, projectCuttingDO); @@ -235,13 +238,12 @@ public class ProjectServiceImpl implements ProjectService { //向数据库添加数据 projectDAO.updateProjectCutting(projectCuttingDO); return ResultUtil.success(); - } else return ResultUtil.error(ErrorCode.NOT_ADMIN); } @Override + @CheckUserHasPermission("project.cutting.delete") public BaseResponse projectToOtherUserForCutting(HttpServletRequest request, Long oldUid, Long pid, Long newUid) { log.info("\t> 执行 Service 层 ProjectService.projectToOtherUserForCutting方法"); - if (Processing.checkUserIsAdmin(request, roleMapper)) { //检测新旧用户是否存在 if (!userDAO.isExistUser(oldUid) || !userDAO.isExistUser(newUid)) { return ResultUtil.error(ErrorCode.USER_NOT_EXIST); @@ -255,7 +257,6 @@ public class ProjectServiceImpl implements ProjectService { return ResultUtil.error(ErrorCode.DATABASE_UPDATE_ERROR); } return ResultUtil.success(); - } else return ResultUtil.error(ErrorCode.NOT_ADMIN); } diff --git a/src/main/java/com/jsl/oa/services/impl/RoleServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/RoleServiceImpl.java index 28f4b24..70092a9 100644 --- a/src/main/java/com/jsl/oa/services/impl/RoleServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/RoleServiceImpl.java @@ -1,5 +1,6 @@ package com.jsl.oa.services.impl; +import com.jsl.oa.annotations.CheckUserHasPermission; import com.jsl.oa.dao.RoleDAO; import com.jsl.oa.dao.UserDAO; import com.jsl.oa.exception.ClassCopyException; @@ -40,6 +41,7 @@ public class RoleServiceImpl implements RoleService { private final UserDAO userDAO; @Override + @CheckUserHasPermission("role.add") public BaseResponse roleAddUser(HttpServletRequest request, Long uid, Long rid) { log.info("\t> 执行 Service 层 RoleService.addRoleUser 方法"); if (Processing.checkUserIsAdmin(request, roleDAO.roleMapper)) { @@ -51,6 +53,7 @@ public class RoleServiceImpl implements RoleService { } @Override + public BaseResponse roleRemoveUser(HttpServletRequest request, Long uid) { log.info("\t> 执行 Service 层 RoleService.delRoleUser 方法"); if (Processing.checkUserIsAdmin(request, roleDAO.roleMapper)) {