xiangpei
2025-05-14 47cd9ecc0eff38ffe6b3b794b2bf197e958f4403
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;
@@ -19,9 +21,12 @@
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
@@ -65,9 +70,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());
        MyUser authUser = new MyUser(user.getUserName(), user.getPassword(), grantedAuthorities, user.getRole(), 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(dept -> Objects.nonNull(dept.getSpecial()) && dept.getSpecial())) {
                List<CascaderDataVO> levelDeptList = departmentMapper.getLevelDeptList(3);
                List<Integer> level3DeptIds = levelDeptList.stream().map(CascaderDataVO::getValue).collect(Collectors.toList());
                deptIds.addAll(level3DeptIds);
            }
        }
         else if (CollectionUtils.isEmpty(deptIds)) {
            // 如果是普通学员,查出所在部门
            deptIds = userService.getDeptIds(user.getId());
        }
        MyUser authUser = new MyUser(user.getUserName(), user.getPassword(), grantedAuthorities, user.getRole(), deptIds);
        return new UsernamePasswordAuthenticationToken(authUser, authUser.getPassword(), authUser.getAuthorities());
    }