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 c6b10dbe..b56877b6 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,19 +25,16 @@ 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; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; - import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.lang.reflect.Field; @@ -45,9 +42,9 @@ import java.util.*; import java.util.stream.Collectors; /** - * @author Zheng Jie - * @date 2019-03-25 - */ +* @author Zheng Jie +* @date 2019-03-25 +*/ @Service @RequiredArgsConstructor @CacheConfig(cacheNames = "dept") @@ -62,13 +59,13 @@ 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); - List fields = QueryHelp.getAllFields(criteria.getClass()); - List fieldNames = new ArrayList() {{ - add("pidIsNull"); - add("enabled"); - }}; + 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) { //设置对象的访问权限,保证对private的属性的访问 field.setAccessible(true); @@ -82,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 @@ -251,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; + } + /** * 清理缓存 *