From 3984187468d7af3b24dbc0edbeb893abf186b1ad Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期五, 12 七月 2024 18:52:37 +0800 Subject: [PATCH] 登录判断是否能管理三级单位 --- src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java | 9 +++- src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationProvider.java | 24 ++++++++--- src/main/resources/mapper/DepartmentMapper.xml | 4 ++ src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java | 8 ++++ src/main/java/com/mindskip/xzs/repository/UserMapper.java | 10 ++++ src/main/java/com/mindskip/xzs/service/UserService.java | 4 + src/main/resources/mapper/UserMapper.xml | 12 +++++ 7 files changed, 59 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationProvider.java b/src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationProvider.java index 5104811..b9d6e21 100644 --- a/src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationProvider.java +++ b/src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationProvider.java @@ -2,9 +2,11 @@ import com.mindskip.xzs.context.WebContext; +import com.mindskip.xzs.domain.Department; import com.mindskip.xzs.domain.enums.DeptAdminEnum; import com.mindskip.xzs.domain.enums.RoleEnum; import com.mindskip.xzs.domain.enums.UserStatusEnum; +import com.mindskip.xzs.domain.vo.CascaderDataVO; import com.mindskip.xzs.repository.DepartmentMapper; import com.mindskip.xzs.service.AuthenticationService; import com.mindskip.xzs.service.UserService; @@ -23,6 +25,7 @@ import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; /** @@ -66,16 +69,23 @@ grantedAuthorities.add(new SimpleGrantedAuthority(RoleEnum.DEPT_ADMIN.getRoleName())); } grantedAuthorities.add(new SimpleGrantedAuthority(RoleEnum.fromCode(user.getRole()).getRoleName())); - // 鑾峰彇璇ョ敤鎴风鐞嗛儴闂ㄥ強鍏朵笅绾� - List<Integer> deptAdminIds = userService.getDeptAdminIds(user.getId()); - if (! CollectionUtils.isEmpty(deptAdminIds)) { - deptAdminIds = departmentMapper.getChilds(deptAdminIds); // 鏌ヨ瀛愰儴闂� + // 鑾峰彇璇ョ敤鎴风鐞嗛儴闂ㄥ強鍏朵笅绾eptAdminIds + List<Department> deptList = userService.getDeptAdminIdAndInfo(user.getId()); + List<Integer> deptIds = deptList.stream().map(dept -> dept.getId()).collect(Collectors.toList()); + if (! CollectionUtils.isEmpty(deptIds)) { + deptIds = departmentMapper.getChilds(deptIds); // 鏌ヨ瀛愰儴闂� + // 濡傛灉璇ラ儴闂ㄨ繕琚祴浜堜簡绠$悊涓夌骇鍗曚綅鐨勭殑鏉冮檺锛屽垯鏌ュ嚭鏉� + if (deptList.stream().anyMatch(Department::getSpecial)) { + List<CascaderDataVO> levelDeptList = departmentMapper.getLevelDeptList(3); + List<Integer> level3DeptIds = levelDeptList.stream().map(CascaderDataVO::getValue).collect(Collectors.toList()); + deptIds.addAll(level3DeptIds); + } } - if (CollectionUtils.isEmpty(deptAdminIds)) { + else if (CollectionUtils.isEmpty(deptIds)) { // 濡傛灉鏄櫘閫氬鍛橈紝鏌ュ嚭鎵�鍦ㄩ儴闂� - deptAdminIds = userService.getDeptIds(user.getId()); + deptIds = userService.getDeptIds(user.getId()); } - MyUser authUser = new MyUser(user.getUserName(), user.getPassword(), grantedAuthorities, user.getRole(), deptAdminIds); + MyUser authUser = new MyUser(user.getUserName(), user.getPassword(), grantedAuthorities, user.getRole(), deptIds); return new UsernamePasswordAuthenticationToken(authUser, authUser.getPassword(), authUser.getAuthorities()); } diff --git a/src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java b/src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java index 5722d19..ead08a8 100644 --- a/src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java +++ b/src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java @@ -55,4 +55,12 @@ * @return */ List<Integer> getFather(@Param("deptId") Integer deptId); + + /** + * 鑾峰彇鍑犵骇鍗曚綅 + * + * @param level + * @return + */ + List<CascaderDataVO> getLevelDeptList(@Param("level") Integer level); } diff --git a/src/main/java/com/mindskip/xzs/repository/UserMapper.java b/src/main/java/com/mindskip/xzs/repository/UserMapper.java index 4354f1e..2d55a02 100644 --- a/src/main/java/com/mindskip/xzs/repository/UserMapper.java +++ b/src/main/java/com/mindskip/xzs/repository/UserMapper.java @@ -167,7 +167,7 @@ void cancelUserDeptAdmin(UpdateDeptAdminVO form); - List<Integer> getDeptAdminIds(Integer id); + List<Integer> getDeptAdminIds(@Param("userId") Integer userId); List<Department> getDeptAdmins(Integer id); @@ -178,4 +178,12 @@ List<User> getFailExamUser(Integer examPaperId); List<User> getFailTemplateUser(Integer templateId); + + /** + * 鑾峰彇鐢ㄦ埛绠$悊鐨勯儴闂ㄤ俊鎭� + * + * @param userId + * @return + */ + List<Department> getDeptAdminIdAndInfo(@Param("userId") Integer userId); } diff --git a/src/main/java/com/mindskip/xzs/service/UserService.java b/src/main/java/com/mindskip/xzs/service/UserService.java index 0b5753f..a604df6 100644 --- a/src/main/java/com/mindskip/xzs/service/UserService.java +++ b/src/main/java/com/mindskip/xzs/service/UserService.java @@ -139,7 +139,9 @@ User getUserByExam(ExamPaper examPaper); - List<Integer> getDeptAdminIds(Integer id); + List<Integer> getDeptAdminIds(Integer userId); + + List<Department> getDeptAdminIdAndInfo(Integer userId); List<Department> getDeptAdmins(Integer id); diff --git a/src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java index a894226..52814e7 100644 --- a/src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java +++ b/src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java @@ -187,8 +187,13 @@ } @Override - public List<Integer> getDeptAdminIds(Integer id) { - return userMapper.getDeptAdminIds(id); + public List<Integer> getDeptAdminIds(Integer userId) { + return userMapper.getDeptAdminIds(userId); + } + + @Override + public List<Department> getDeptAdminIdAndInfo(Integer userId) { + return userMapper.getDeptAdminIdAndInfo(userId); } @Override diff --git a/src/main/resources/mapper/DepartmentMapper.xml b/src/main/resources/mapper/DepartmentMapper.xml index 598c2a5..bb6a0ff 100644 --- a/src/main/resources/mapper/DepartmentMapper.xml +++ b/src/main/resources/mapper/DepartmentMapper.xml @@ -173,4 +173,8 @@ temp_table </select> + <select id="getLevelDeptList" resultType="com.mindskip.xzs.domain.vo.CascaderDataVO"> + SELECT id as value, name as label, parent_id, special, level FROM t_department WHERE level = #{level} + </select> + </mapper> diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml index 099b1d3..406aea9 100644 --- a/src/main/resources/mapper/UserMapper.xml +++ b/src/main/resources/mapper/UserMapper.xml @@ -538,7 +538,17 @@ </update> <select id="getDeptAdminIds" resultType="java.lang.Integer" parameterType="java.lang.Integer"> - select department_id from t_user_department where dept_admin = 1 and user_id = #{id} + select department_id from t_user_department where dept_admin = 1 and user_id = #{userId} + </select> + + <select id="getDeptAdminIdAndInfo" resultType="com.mindskip.xzs.domain.Department"> + select + d.id, d.name, d.special + from + t_user_department ud + INNER JOIN t_department d ON ud.department_id = d.id + WHERE + dept_admin = 1 and user_id = #{userId} </select> <select id="getDeptAdmins" resultType="com.mindskip.xzs.domain.Department" parameterType="java.lang.Integer"> -- Gitblit v1.8.0