package me.zhengjie.config; import me.zhengjie.modules.system.domain.Dept; import me.zhengjie.modules.system.service.DeptService; import me.zhengjie.modules.system.service.RoleService; import me.zhengjie.modules.system.service.UserService; import me.zhengjie.modules.system.service.dto.DeptDTO; import me.zhengjie.modules.system.service.dto.RoleSmallDTO; import me.zhengjie.modules.system.service.dto.UserDTO; import me.zhengjie.utils.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; /** * 数据权限配置 * @author Zheng Jie * @date 2019-4-1 */ @Component public class DataScope { private final String[] scopeType = {"全部","本级","自定义"}; private final UserService userService; private final RoleService roleService; private final DeptService deptService; public DataScope(UserService userService, RoleService roleService, DeptService deptService) { this.userService = userService; this.roleService = roleService; this.deptService = deptService; } public Set getDeptIds() { UserDTO user = userService.findByName(SecurityUtils.getUsername()); // 用于存储部门id Set deptIds = new HashSet<>(); // 查询用户角色 List roleSet = roleService.findByUsers_Id(user.getId()); for (RoleSmallDTO role : roleSet) { if (scopeType[0].equals(role.getDataScope())) { return new HashSet<>() ; } // 存储本级的数据权限 if (scopeType[1].equals(role.getDataScope())) { deptIds.add(user.getDept().getId()); } // 存储自定义的数据权限 if (scopeType[2].equals(role.getDataScope())) { Set depts = deptService.findByRoleIds(role.getId()); for (Dept dept : depts) { deptIds.add(dept.getId()); List deptChildren = deptService.findByPid(dept.getId()); if (deptChildren != null && deptChildren.size() != 0) { deptIds.addAll(getDeptChildren(deptChildren)); } } } } return deptIds; } public List getDeptChildren(List deptList) { List list = new ArrayList<>(); deptList.forEach(dept -> { if (dept!=null && dept.getEnabled()){ List depts = deptService.findByPid(dept.getId()); if(deptList.size() != 0){ list.addAll(getDeptChildren(depts)); } list.add(dept.getId()); } } ); return list; } }