diff --git a/eladmin-common/src/main/java/me/zhengjie/utils/SecurityUtils.java b/eladmin-common/src/main/java/me/zhengjie/utils/SecurityUtils.java index fe39dcd0..b4fae876 100644 --- a/eladmin-common/src/main/java/me/zhengjie/utils/SecurityUtils.java +++ b/eladmin-common/src/main/java/me/zhengjie/utils/SecurityUtils.java @@ -20,6 +20,7 @@ import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import lombok.extern.slf4j.Slf4j; import me.zhengjie.exception.BadRequestException; +import me.zhengjie.utils.enums.DataScopeEnum; import org.springframework.http.HttpStatus; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; @@ -84,4 +85,16 @@ public class SecurityUtils { JSONArray array = JSONUtil.parseArray(new JSONObject(userDetails).get("dataScopes")); return JSONUtil.toList(array,Long.class); } + + /** + * 获取数据权限级别 + * @return 级别 + */ + public static String getDataScopeType() { + List dataScopes = getCurrentUserDataScope(); + if(dataScopes.size() != 0){ + return ""; + } + return DataScopeEnum.ALL.getValue(); + } } diff --git a/eladmin-system/src/main/java/me/zhengjie/utils/enums/CodeBiEnum.java b/eladmin-common/src/main/java/me/zhengjie/utils/enums/CodeBiEnum.java similarity index 100% rename from eladmin-system/src/main/java/me/zhengjie/utils/enums/CodeBiEnum.java rename to eladmin-common/src/main/java/me/zhengjie/utils/enums/CodeBiEnum.java diff --git a/eladmin-system/src/main/java/me/zhengjie/utils/enums/CodeEnum.java b/eladmin-common/src/main/java/me/zhengjie/utils/enums/CodeEnum.java similarity index 100% rename from eladmin-system/src/main/java/me/zhengjie/utils/enums/CodeEnum.java rename to eladmin-common/src/main/java/me/zhengjie/utils/enums/CodeEnum.java diff --git a/eladmin-system/src/main/java/me/zhengjie/utils/enums/DataScopeEnum.java b/eladmin-common/src/main/java/me/zhengjie/utils/enums/DataScopeEnum.java similarity index 100% rename from eladmin-system/src/main/java/me/zhengjie/utils/enums/DataScopeEnum.java rename to eladmin-common/src/main/java/me/zhengjie/utils/enums/DataScopeEnum.java diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DataServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DataServiceImpl.java index ab828b39..5e3d541d 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DataServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DataServiceImpl.java @@ -65,7 +65,7 @@ public class DataServiceImpl implements DataService { deptIds.addAll(getCustomize(deptIds, role)); break; default: - break; + return new ArrayList<>(deptIds); } } return new ArrayList<>(deptIds); diff --git a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java index 520da6ef..400021df 100644 --- a/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java +++ b/eladmin-system/src/main/java/me/zhengjie/modules/system/service/impl/DeptServiceImpl.java @@ -25,13 +25,11 @@ import me.zhengjie.modules.system.repository.RoleRepository; import me.zhengjie.modules.system.repository.UserRepository; import me.zhengjie.modules.system.service.dto.DeptDto; import me.zhengjie.modules.system.service.dto.DeptQueryCriteria; -import me.zhengjie.utils.FileUtil; -import me.zhengjie.utils.QueryHelp; -import me.zhengjie.utils.RedisUtils; -import me.zhengjie.utils.ValidationUtil; +import me.zhengjie.utils.*; import me.zhengjie.modules.system.repository.DeptRepository; import me.zhengjie.modules.system.service.DeptService; import me.zhengjie.modules.system.service.mapstruct.DeptMapper; +import me.zhengjie.utils.enums.DataScopeEnum; import org.springframework.cache.annotation.CacheConfig; import org.springframework.cache.annotation.Cacheable; import org.springframework.data.domain.Sort; @@ -61,8 +59,11 @@ public class DeptServiceImpl implements DeptService { @Override public List queryAll(DeptQueryCriteria criteria, Boolean isQuery) throws Exception { Sort sort = new Sort(Sort.Direction.ASC, "deptSort"); + String dataScopeType = SecurityUtils.getDataScopeType(); if (isQuery) { - criteria.setPidIsNull(true); + if(dataScopeType.equals(DataScopeEnum.ALL.getValue())){ + criteria.setPidIsNull(true); + } List fields = QueryHelp.getAllFields(criteria.getClass(), new ArrayList<>()); List fieldNames = new ArrayList(){{ add("pidIsNull");add("enabled");}}; for (Field field : fields) { @@ -78,7 +79,12 @@ public class DeptServiceImpl implements DeptService { } } } - return deptMapper.toDto(deptRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),sort)); + List list = deptMapper.toDto(deptRepository.findAll((root, criteriaQuery, criteriaBuilder) -> QueryHelp.getPredicate(root,criteria,criteriaBuilder),sort)); + // 如果为空,就代表为自定义权限或者本级权限,就需要去重,不理解可以注释掉,看查询结果 + if(StringUtils.isBlank(dataScopeType)){ + return deduplication(list); + } + return list; } @Override @@ -247,6 +253,23 @@ public class DeptServiceImpl implements DeptService { } } + private List deduplication(List list) { + List deptDtos = new ArrayList<>(); + for (DeptDto deptDto : list) { + boolean flag = true; + for (DeptDto dto : list) { + if (deptDto.getPid().equals(dto.getId())) { + flag = false; + break; + } + } + if (flag){ + deptDtos.add(deptDto); + } + } + return deptDtos; + } + /** * 清理缓存 * @param id /