|
|
@@ -4,13 +4,20 @@ package com.lc.ibps.platform.service;
|
|
|
|
|
|
import com.lc.ibps.base.core.util.AppUtil;
|
|
|
import com.lc.ibps.base.framework.table.ICommonDao;
|
|
|
+import com.lc.ibps.cloud.entity.*;
|
|
|
+import com.lc.ibps.cloud.entity.APIPageList;
|
|
|
+import com.lc.ibps.org.auth.persistence.entity.ResourcesPo;
|
|
|
+import com.lc.ibps.org.party.persistence.entity.*;
|
|
|
import com.lc.ibps.platform.dao.PartyRoleProviderDao;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
|
|
|
-import java.util.Arrays;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Comparator;
|
|
|
import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.Optional;
|
|
|
import java.util.stream.Collectors;
|
|
|
import java.util.stream.Stream;
|
|
|
|
|
|
@@ -96,4 +103,176 @@ public class PartyRoleProviderService {
|
|
|
partyRoleProviderDao.updateUserRoleJobByUserId(userId,jobs);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ public APIResult<PermissionPageList<PermissionViewDTO>> getPagePermission(APIRequest request){
|
|
|
+
|
|
|
+ APIResult apiResult = new APIResult();
|
|
|
+ PermissionPageList apiPageList = new PermissionPageList();
|
|
|
+ List<PagePermissionMenuVO> allMenuList = new ArrayList<>();
|
|
|
+ List<String> roles = new ArrayList<>();
|
|
|
+ List<PagePermissionDTO> permissions = new ArrayList<>();
|
|
|
+
|
|
|
+ String roleName = (String) getCustomParamFormRequest(request, "roleName");
|
|
|
+ String pageName = (String) getCustomParamFormRequest(request, "pageName");
|
|
|
+
|
|
|
+
|
|
|
+ //查询角色
|
|
|
+ List<PartyRolePo> roleList = partyRoleProviderDao.getRoleByName(roleName);
|
|
|
+ //角色排序
|
|
|
+ roleList = roleList.stream().sorted(Comparator.comparing(PartyRolePo::getRoleNote)).collect(Collectors.toList());
|
|
|
+ //提取roleList中的name属性到排序后的List<String>
|
|
|
+ roles = roleList.stream().map(PartyRolePo::getName).collect(Collectors.toList());
|
|
|
+ //查询页面资源
|
|
|
+ List<ResourcesPo> resourcesList = partyRoleProviderDao.getResourcesByName(pageName);
|
|
|
+
|
|
|
+ //如果没有查询到角色或资源,则直接返回
|
|
|
+ if(CollectionUtils.isEmpty(roleList) || CollectionUtils.isEmpty(resourcesList)){
|
|
|
+ apiResult.setState(200);
|
|
|
+ apiResult.setMessage("没有符合条件的数据");
|
|
|
+ apiResult.setData(null);
|
|
|
+ return apiResult;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //对资源名称做层级处理
|
|
|
+ for(ResourcesPo resourcesPo:resourcesList){
|
|
|
+ allMenuList.add(new PagePermissionMenuVO(resourcesPo.getSn(), resourcesPo.getName(), resourcesPo.getId(), resourcesPo.getParentId(),resourcesPo.getChecked()));
|
|
|
+ }
|
|
|
+ List<PagePermissionMenuVO> result = getChildNode("0", allMenuList);
|
|
|
+ allMenuList = getFlatMenuList("",result);
|
|
|
+
|
|
|
+ //对页面资源进行分页处理
|
|
|
+ if(null != request.getRequestPage() && request.getRequestPage().getPageNo()>0 && request.getRequestPage().getLimit()>0){
|
|
|
+ APIRequestPage requestPage = request.getRequestPage();
|
|
|
+ apiPageList = paginateList(requestPage.getPageNo(), requestPage.getLimit(), allMenuList);
|
|
|
+ }else {
|
|
|
+ apiPageList = paginateList(1, 50, allMenuList);
|
|
|
+ }
|
|
|
+
|
|
|
+ //查询每个页面资源对应的角色权限
|
|
|
+ List<PagePermissionMenuVO> pageResourcesList = apiPageList.getDataResult();
|
|
|
+ for(PagePermissionMenuVO menuVO:pageResourcesList){
|
|
|
+ List<String> roleIdList = partyRoleProviderDao.getRoleIdsByResourcesId(menuVO.getId());
|
|
|
+ //封装每行的数据(每个页面的所有的角色权限标识)
|
|
|
+ PagePermissionDTO pagePermissionDTO = new PagePermissionDTO();
|
|
|
+ pagePermissionDTO.setPageId(menuVO.getId());
|
|
|
+ pagePermissionDTO.setPageName(menuVO.getParentCode() + "/" + menuVO.getMenuCode());
|
|
|
+ for(PartyRolePo rolePo:roleList){
|
|
|
+ pagePermissionDTO.setRolePermission(rolePo.getName(),roleIdList.contains(rolePo.getId())?true:false);
|
|
|
+ }
|
|
|
+ permissions.add(pagePermissionDTO);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //封装整体的返回数据
|
|
|
+ PermissionViewDTO permissionViewDTO = new PermissionViewDTO();
|
|
|
+ permissionViewDTO.setRoles(roles);
|
|
|
+ permissionViewDTO.setPermissions(permissions);
|
|
|
+
|
|
|
+ apiPageList.setData(permissionViewDTO);
|
|
|
+ apiPageList.setDataResult(null);
|
|
|
+ apiResult.setData(apiPageList);
|
|
|
+ apiResult.setMessage("查询成功");
|
|
|
+
|
|
|
+ return apiResult;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 对List进行分页切分
|
|
|
+ * @param pageno 起始页号(从1开始)
|
|
|
+ * @param pagesize 页数
|
|
|
+ * @param list 待分页的List
|
|
|
+ * @return APIPageList包含分页数据和分页信息
|
|
|
+ */
|
|
|
+ public <T> PermissionPageList<T> paginateList(int pageno, int pagesize, List<T> list) {
|
|
|
+ PermissionPageList<T> result = new PermissionPageList<>();
|
|
|
+
|
|
|
+ if (list == null || list.isEmpty() || pagesize <= 0 || pageno <= 0) {
|
|
|
+ result.setDataResult(list);
|
|
|
+ result.setPageResult(new APIPageResult(pageno, pagesize, list == null ? 0 : list.size()));
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ int totalCount = list.size();
|
|
|
+ int startIndex = (pageno - 1) * pagesize;
|
|
|
+ int endIndex = Math.min(startIndex + pagesize, totalCount);
|
|
|
+
|
|
|
+ List<T> pageData = startIndex >= totalCount ? list.subList(0, 0) : list.subList(startIndex, endIndex);
|
|
|
+
|
|
|
+ result.setDataResult(pageData);
|
|
|
+ result.setPageResult(new APIPageResult(pageno, pagesize, totalCount));
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 从APIRequest的customs中提取参数
|
|
|
+ * @param request APIRequest对象
|
|
|
+ * @param paramName 参数名称
|
|
|
+ * @return 参数值,如果不存在则返回null
|
|
|
+ */
|
|
|
+ private Object getCustomParamFormRequest(APIRequest request, String paramName) {
|
|
|
+ if (request == null || request.getCustoms() == null || paramName == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return request.getCustoms().get(paramName);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public List<PagePermissionMenuVO> getChildNode(String rootMenu, List<PagePermissionMenuVO> allMenuList) {
|
|
|
+
|
|
|
+ List<PagePermissionMenuVO> childMenu = new ArrayList<>();
|
|
|
+ for (PagePermissionMenuVO menu : allMenuList) {
|
|
|
+ if (menu.getParentId().compareTo(rootMenu) == 0) {
|
|
|
+ // 递归查询此节点下的所有子节点
|
|
|
+ List<PagePermissionMenuVO> childNode = getChildNode(menu.getId(), allMenuList);
|
|
|
+ menu.setChildNode(childNode);
|
|
|
+ childMenu.add(menu);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 子节点进行排序
|
|
|
+ List<PagePermissionMenuVO> childSortMenu = Optional.ofNullable(childMenu)
|
|
|
+ .map(List::stream)
|
|
|
+ .orElseGet(Stream::empty)
|
|
|
+ .sorted(Comparator.comparing(PagePermissionMenuVO::getSn))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ return childSortMenu;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public List<PagePermissionMenuVO> getFlatMenuList(String parentCode,List<PagePermissionMenuVO> allMenuList){
|
|
|
+ List<PagePermissionMenuVO> menu = new ArrayList<>();
|
|
|
+ for (PagePermissionMenuVO m : allMenuList) {
|
|
|
+ m.setParentCode(parentCode);
|
|
|
+ menu.add(m);
|
|
|
+ menu.addAll(getFlatMenuList(parentCode+"/"+m.getMenuCode(),m.getChildNode()));
|
|
|
+ }
|
|
|
+ return menu;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public void savePagePermission(PermissionSaveDTO permissionSaveDTO){
|
|
|
+ if( null == permissionSaveDTO || CollectionUtils.isEmpty(permissionSaveDTO.getPermissions())){
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //遍历每个页面的权限设置
|
|
|
+ for(PagePermissionDTO pagePermissionDTO:permissionSaveDTO.getPermissions()){
|
|
|
+ String pageId = pagePermissionDTO.getPageId();
|
|
|
+ //删除该页面对应的所有角色权限
|
|
|
+ partyRoleProviderDao.deleteRoleResourcesByResourcesId(pageId);
|
|
|
+ //获取该页面有权限的角色列表
|
|
|
+ List<String> roleNameList = pagePermissionDTO.getRolesWithPermission();
|
|
|
+ for(String roleName:roleNameList){
|
|
|
+ //插入资源和角色的对应关系
|
|
|
+ partyRoleProviderDao.insertRoleResources(roleName, pageId);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|