| | |
| | | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.vci.ubcs.code.feign.ICodeClassifyClient; |
| | | import com.vci.ubcs.starter.web.util.VciBaseUtil; |
| | | import com.vci.ubcs.system.entity.ClassifyAuth; |
| | | import com.vci.ubcs.system.entity.Menu; |
| | |
| | | |
| | | private final IMenuService menuService; |
| | | |
| | | private final ICodeClassifyClient codeClassifyClient; |
| | | |
| | | /** |
| | | * 分类授权保存接口 |
| | | * @param classifyAuthList |
| | |
| | | if(classifyAuthList.isEmpty()){ |
| | | R.fail("授权列表不能为空!"); |
| | | } |
| | | // 判重,查看是否存在同一个classid下配置了相同的角色 |
| | | Map<String, Long> roleidCounts = classifyAuthList.stream() |
| | | .collect(Collectors.groupingBy(ClassifyAuth::getRoleId, Collectors.counting())); |
| | | |
| | | // 检查是否有roleid出现次数大于1的情况 |
| | | boolean hasDuplicateRoleid = roleidCounts.values().stream() |
| | | .anyMatch(count -> count > 1); |
| | | if(hasDuplicateRoleid){ |
| | | R.fail("角色和分类已经存在,请重新配置!"); |
| | | } |
| | | |
| | | // 如果传过来的集合中该分类id下删除了部分角色的授权,就需要将该库中classifyId下不存在的数据删掉 |
| | | List<String> roleIds = classifyAuthList.stream().map(ClassifyAuth::getRoleId).collect(Collectors.toList()); |
| | | // 删除 |
| | |
| | | LambdaQueryWrapper<ClassifyAuth> wrapper = Wrappers.<ClassifyAuth>query() |
| | | .lambda().eq(ClassifyAuth::getClassifyId,classifyAuthVO.getClassifyId()); |
| | | List<ClassifyAuth> classifyAuths = this.classifyAuthMapper.selectList(wrapper); |
| | | if(!classifyAuths.isEmpty()){ |
| | | return ClassifyAuthWrapper.build().listVO(classifyAuths); |
| | | if(classifyAuths.isEmpty()){ |
| | | return new ArrayList<ClassifyAuthVO>(); |
| | | } |
| | | return new ArrayList<ClassifyAuthVO>(); |
| | | return ClassifyAuthWrapper.build().listVO(classifyAuths); |
| | | } |
| | | |
| | | /** |
| | |
| | | * @return |
| | | */ |
| | | public Map<String,Boolean> getAuthButtonList(String classifyId){ |
| | | if(Func.isBlank(classifyId)){ |
| | | return new HashMap<>(); |
| | | } |
| | | //查询分类节点的所有父级节点 |
| | | R<List<String>> listR = codeClassifyClient.selectAllParentOid(classifyId); |
| | | if (!listR.isSuccess() && !listR.getData().isEmpty()) { |
| | | throw new ServiceException("获取分类信息失败!"); |
| | | } |
| | | // 返回的分类oid是当前节点为第一个,后面依次是他的上层节点 |
| | | List<String> classifyOidList = listR.getData(); |
| | | final String roleIds = AuthUtil.getUser().getRoleId(); |
| | | // 先查询按钮id列表 |
| | | LambdaQueryWrapper<ClassifyAuth> wrapper = Wrappers.<ClassifyAuth>query() |
| | | .lambda().eq(ClassifyAuth::getClassifyId, classifyId) |
| | | .in(ClassifyAuth::getRoleId, roleIds); |
| | | List<ClassifyAuth> classifyAuths = this.classifyAuthMapper.selectList(wrapper); |
| | | //如果当前分类没有找到授权配置,就依次从当前节点往上层节点找授权配置,找到了就停止,没找到就一直找到最后 |
| | | if(classifyAuths.isEmpty()){ |
| | | // 下标从1开始因为当前节点0已经查询过 |
| | | for (int i = 1; i < classifyOidList.size(); i++) { |
| | | classifyAuths = this.classifyAuthMapper.selectList( |
| | | Wrappers.<ClassifyAuth>query() |
| | | .lambda().eq(ClassifyAuth::getClassifyId, classifyOidList.get(i)) |
| | | .in(ClassifyAuth::getRoleId, roleIds) |
| | | ); |
| | | if(!classifyAuths.isEmpty()){ |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | //出现了错误数据,同一个角色和同一个分类id存在多条授权记录 |
| | | if(classifyAuths.size()>1){ |
| | | throw new ServiceException("角色和分类配置存在多条记录,请联系管理人员清理错误配置!"); |
| | | } |
| | |
| | | return buttonMaps; |
| | | } |
| | | |
| | | /** |
| | | * 根据角色id查看有哪些分类具备查看权限 |
| | | * @param roleIds |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<String> getViewClassByRoleIds(List<String> roleIds) { |
| | | if(roleIds.isEmpty()){ |
| | | return new ArrayList<>(); |
| | | } |
| | | return this.classifyAuthMapper.getViewClassByRoleIds(roleIds); |
| | | } |
| | | |
| | | } |