xiangpei
2024-07-12 3984187468d7af3b24dbc0edbeb893abf186b1ad
登录判断是否能管理三级单位
7个文件已修改
71 ■■■■ 已修改文件
src/main/java/com/mindskip/xzs/configuration/spring/security/RestAuthenticationProvider.java 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/repository/DepartmentMapper.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/repository/UserMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/service/UserService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/DepartmentMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/UserMapper.xml 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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); // 查询子部门
        // 获取该用户管理部门及其下级deptAdminIds
        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());
    }
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);
}
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);
}
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);
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
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>
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">