diff --git a/src/main/java/com/jsl/oa/aspect/AuthControllerAspect.java b/src/main/java/com/jsl/oa/aspect/AuthControllerAspect.java index a54adfa..ca301eb 100755 --- a/src/main/java/com/jsl/oa/aspect/AuthControllerAspect.java +++ b/src/main/java/com/jsl/oa/aspect/AuthControllerAspect.java @@ -67,11 +67,11 @@ public class AuthControllerAspect { * @throws Throwable 异常 */ @Around("execution(* com.jsl.oa.controllers.*.*(..)) " + - "|| !execution(* com.jsl.oa.controllers.AuthController.authSendEmailCode(..))" + - "|| !execution(* com.jsl.oa.controllers.AuthController.authLoginByEmail(..))" + - "|| !execution(* com.jsl.oa.controllers.AuthController.authForgetPassword(..))" + - "|| !execution(* com.jsl.oa.controllers.AuthController.authLogin(..))" + - "|| !execution(* com.jsl.oa.controllers.AuthController.authRegister(..))") + "&& !execution(* com.jsl.oa.controllers.AuthController.authSendEmailCode(..))" + + "&& !execution(* com.jsl.oa.controllers.AuthController.authLoginByEmail(..))" + + "&& !execution(* com.jsl.oa.controllers.AuthController.authForgetPassword(..))" + + "&& !execution(* com.jsl.oa.controllers.AuthController.authLogin(..))" + + "&& !execution(* com.jsl.oa.controllers.AuthController.authRegister(..))") public Object tokenControllerAround(ProceedingJoinPoint pjp) throws Throwable { // 获取 HttpServletRequest 对象 HttpServletRequest request = ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest(); diff --git a/src/main/java/com/jsl/oa/controllers/PermissionController.java b/src/main/java/com/jsl/oa/controllers/PermissionController.java index 23b7c1f..14d7edc 100755 --- a/src/main/java/com/jsl/oa/controllers/PermissionController.java +++ b/src/main/java/com/jsl/oa/controllers/PermissionController.java @@ -38,7 +38,9 @@ public class PermissionController { // 判断是否有参数错误 if (uid == null ) { return ResultUtil.error(ErrorCode.PARAMETER_ERROR); - } else return permissionService.permissionUser(request,uid); + } else { + return permissionService.permissionUser(request,uid); + } } @GetMapping("/permission/get") diff --git a/src/main/java/com/jsl/oa/dao/PermissionDAO.java b/src/main/java/com/jsl/oa/dao/PermissionDAO.java new file mode 100644 index 0000000..048f080 --- /dev/null +++ b/src/main/java/com/jsl/oa/dao/PermissionDAO.java @@ -0,0 +1,88 @@ +package com.jsl.oa.dao; + +import com.jsl.oa.mapper.PermissionMapper; +import com.jsl.oa.model.doData.PermissionDO; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.ArrayList; +import java.util.List; + +/** + *

权限数据表

+ *
+ * 内容进入自定义实体类 + * + * @author xiao_lfeng + * @version v1.1.0 + * @since v1.1.0 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class PermissionDAO { + private final PermissionMapper permissionMapper; + + public List getPermission(Long uid) { + log.info("\t> 执行 DAO 层 PermissionDAO.getPermission 方法"); + List permissionList = permissionMapper.permissionUserPid(uid); + List getPermissionForString = new ArrayList<>(); + for (PermissionDO permission : permissionList) { + // 寻找是否存在父亲 + StringBuilder permissionString = new StringBuilder(); + if (permission.getPid() != null) { + // 存在父亲 + this.getFatherPermission(permissionString, permission.getPid()); + // 寻找子类 + this.getChildPermission(permissionString, permission.getId(), getPermissionForString); + getPermissionForString.add(permissionString.toString()); + } else { + // 不存在父亲 + permissionString.append(permission.getName()); + this.getChildPermission(permissionString, permission.getId(), getPermissionForString); + getPermissionForString.add(permissionString.toString()); + } + } + // 存入 Redis + + return getPermissionForString; + } + + private void getChildPermission(StringBuilder permissionString, Long id, List getPermissionForString) { + // 获取子类权限信息 + List permissionList = permissionMapper.getChildPermission(id); + // 判断是否存在子类 + if (!permissionList.isEmpty()) { + // 存在子类 + for (PermissionDO permission : permissionList) { + StringBuilder childPermissionString = new StringBuilder(permissionString); + // 遍历数据检查是否依旧存在子类 + List childPermissionList = permissionMapper.getChildPermission(permission.getId()); + if (!childPermissionList.isEmpty()) { + // 存在子类 + permissionString.append(".").append(permission.getName()); + this.getChildPermission(permissionString, permission.getId(), getPermissionForString); + } else { + // 不存在子类 + permissionString.append(".").append(permission.getName()); + getPermissionForString.add(permissionString.toString()); + } + permissionString = childPermissionString; + } + } + } + + public void getFatherPermission(StringBuilder permissionString, Long pid) { + // 获取权限信息 + PermissionDO permissionDO = permissionMapper.getPermissionById(pid); + // 判断是否存在父亲 + if (permissionDO.getPid() != null) { + // 存在父亲 + this.getFatherPermission(permissionString, permissionDO.getPid()); + } else { + // 不存在父亲 + permissionString.append(permissionDO.getCode()); + } + } +} diff --git a/src/main/java/com/jsl/oa/exception/ProcessException.java b/src/main/java/com/jsl/oa/exception/ProcessException.java index 9be2c47..a0d60c3 100755 --- a/src/main/java/com/jsl/oa/exception/ProcessException.java +++ b/src/main/java/com/jsl/oa/exception/ProcessException.java @@ -12,6 +12,7 @@ import org.springframework.web.HttpRequestMethodNotSupportedException; import org.springframework.web.bind.MissingServletRequestParameterException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException; import java.util.Objects; import java.util.regex.Matcher; @@ -66,4 +67,10 @@ public class ProcessException { log.error(e.getMessage(), e); return ResultUtil.error("ServerInternalError", 50001, "服务器内部错误"); } + + @ExceptionHandler(value = MethodArgumentTypeMismatchException.class) + public ResponseEntity businessMethodArgumentTypeMismatchException(@NotNull MethodArgumentTypeMismatchException e) { + log.error(e.getMessage(), e); + return ResultUtil.error("ServerInternalError", 50002, "服务器内部错误"); + } } diff --git a/src/main/java/com/jsl/oa/mapper/PermissionMapper.java b/src/main/java/com/jsl/oa/mapper/PermissionMapper.java index 0baa3c1..8f10256 100644 --- a/src/main/java/com/jsl/oa/mapper/PermissionMapper.java +++ b/src/main/java/com/jsl/oa/mapper/PermissionMapper.java @@ -9,16 +9,16 @@ import java.util.List; @Mapper public interface PermissionMapper { - @Insert("insert into organize_oa.oa_role_permissions(rid, pid) VALUE (#{rid},#{pid})") + @Insert("INSERT INTO organize_oa.oa_role_permissions(rid, pid) VALUE (#{rid},#{pid})") void permissionAdd(Long rid, Long pid); - @Select("select name from organize_oa.oa_permissions where id in(select pid " + - "from organize_oa.oa_role_permissions where rid=" + - "(select rid from organize_oa.oa_role_user where uid=#{uid}) )") - List permissionUser(Long uid); + @Select("SELECT * FROM organize_oa.oa_permissions WHERE id IN " + + "(SELECT pid FROM organize_oa.oa_role_permissions WHERE rid IN " + + "(SELECT rid FROM organize_oa.oa_role_user WHERE uid = #{uid}))") + List permissionUserPid(Long uid); @Select("SELECT * FROM organize_oa.oa_permissions where id=#{id}") - PermissionDO permissionGetById(Long id); + PermissionDO getPermissionById(Long id); @Select("SELECT * FROM organize_oa.oa_role_permissions where pid=#{pid}") RolePermissionDO rolePermissionGetByPid(Long pid); @@ -32,4 +32,13 @@ public interface PermissionMapper { @Delete("DELETE FROM organize_oa.oa_permissions where id=#{pid}") boolean deletePermission(Long pid); + + @Select("SELECT * FROM organize_oa.oa_permissions WHERE id IN (#{permissionList})") + List permissionGet(String permissionList); + + @Select("SELECT * FROM organize_oa.oa_permissions WHERE id = #{pid}") + PermissionDO getPermissionByPid(Long pid); + + @Select("SELECT * FROM organize_oa.oa_permissions WHERE pid = #{id}") + List getChildPermission(Long id); } diff --git a/src/main/java/com/jsl/oa/services/impl/PermissionServiceImpl.java b/src/main/java/com/jsl/oa/services/impl/PermissionServiceImpl.java index ff7c989..896fdf6 100644 --- a/src/main/java/com/jsl/oa/services/impl/PermissionServiceImpl.java +++ b/src/main/java/com/jsl/oa/services/impl/PermissionServiceImpl.java @@ -1,5 +1,6 @@ package com.jsl.oa.services.impl; +import com.jsl.oa.dao.PermissionDAO; import com.jsl.oa.dao.UserDAO; import com.jsl.oa.mapper.PermissionMapper; import com.jsl.oa.mapper.RoleMapper; @@ -25,24 +26,26 @@ public class PermissionServiceImpl implements PermissionService { private final PermissionMapper permissionMapper; private final RoleMapper roleMapper; + private final PermissionDAO permissionDAO; private final UserDAO userDAO; @Override public BaseResponse permissionAdd(HttpServletRequest request, Long rid, Long pid) { log.info("\t> 执行 Service 层 PermissionService.permissionAdd 方法"); - if(!Processing.checkUserIsAdmin(request,roleMapper)){ + if (!Processing.checkUserIsAdmin(request, roleMapper)) { return ResultUtil.error(ErrorCode.NOT_ADMIN); } - permissionMapper.permissionAdd(rid,pid); + permissionMapper.permissionAdd(rid, pid); return ResultUtil.success(); } @Override public BaseResponse permissionUser(HttpServletRequest request, Long uid) { - log.info("\t> 执行 Service 层 PermissionService.permissionUser 方法"); - if(userDAO.isExistUser(uid)){ - List permission = permissionMapper.permissionUser(uid); - return ResultUtil.success(permission); + log.info("\t> 执行 Service 层 PermissionService.permissionUserPid 方法"); + if (userDAO.isExistUser(uid)) { + // 获取权限列表信息 + List getPermissionForString = permissionDAO.getPermission(uid); + return ResultUtil.success(getPermissionForString); } return ResultUtil.error(ErrorCode.USER_NOT_EXIST); } @@ -52,13 +55,13 @@ public class PermissionServiceImpl implements PermissionService { public BaseResponse permissionGet(HttpServletRequest request) { log.info("\t> 执行 Service 层 PermissionService.permissionGet 方法"); //检验用户权限是否为管理员 - if(!Processing.checkUserIsAdmin(request,roleMapper)){ + if (!Processing.checkUserIsAdmin(request, roleMapper)) { return ResultUtil.error(ErrorCode.NOT_ADMIN); } //获取所有权限数据 - List permissionDOS = permissionMapper.getAllPermission(); + List permissionDOList = permissionMapper.getAllPermission(); //将数据按父子类封装 - List permissionContentVos = Processing.convertToVoList(permissionDOS); + List permissionContentVos = Processing.convertToVoList(permissionDOList); return ResultUtil.success(permissionContentVos); } @@ -67,18 +70,18 @@ public class PermissionServiceImpl implements PermissionService { public BaseResponse permissionEdit(PermissionEditVO permissionEditVo, HttpServletRequest request) { log.info("\t> 执行 Service 层 PermissionService.permissionEdit 方法"); //检验用户权限是否为管理员 - if(!Processing.checkUserIsAdmin(request,roleMapper)){ + if (!Processing.checkUserIsAdmin(request, roleMapper)) { return ResultUtil.error(ErrorCode.NOT_ADMIN); } //根据id获取对应permission数据 - PermissionDO permissionDO = permissionMapper.permissionGetById(permissionEditVo.getId()); - if(permissionDO == null){ + PermissionDO permissionDO = permissionMapper.getPermissionById(permissionEditVo.getId()); + if (permissionDO == null) { return ResultUtil.error(ErrorCode.PERMISSION_NOT_EXIST); } //传递要编辑的数据 - Processing.copyProperties(permissionEditVo,permissionDO); + Processing.copyProperties(permissionEditVo, permissionDO); //更新permission - if(!permissionMapper.updatePermission(permissionDO)){ + if (!permissionMapper.updatePermission(permissionDO)) { return ResultUtil.error(ErrorCode.DATABASE_UPDATE_ERROR); } return ResultUtil.success(); @@ -86,17 +89,15 @@ public class PermissionServiceImpl implements PermissionService { @Override public BaseResponse permissionDelete(HttpServletRequest request, Long pid) { + log.info("\t> 执行 Service 层 PermissionService.permissionDelete 方法"); //检验用户权限是否为管理员 - if(!Processing.checkUserIsAdmin(request,roleMapper)){ + if (!Processing.checkUserIsAdmin(request, roleMapper)) { return ResultUtil.error(ErrorCode.NOT_ADMIN); } //删除权限 - if(!permissionMapper.deletePermission(pid)){ + if (!permissionMapper.deletePermission(pid)) { return ResultUtil.error(ErrorCode.DATABASE_DELETE_ERROR); } - return ResultUtil.success(); } - - }