From a899eae792897cb014b9291562f32f5786cfb1f4 Mon Sep 17 00:00:00 2001 From: yuxc <yuxc@vci-tech.com> Date: 星期四, 16 一月 2025 15:51:13 +0800 Subject: [PATCH] UI授权后,由于一个用户拥有多个角色问题,没有权限的角色可能会把有权限的角色数据替换,进行修改 --- Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java | 94 ++++++++++++++++++++++------------------------- 1 files changed, 44 insertions(+), 50 deletions(-) diff --git a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java index e9e7253..e6b6c33 100644 --- a/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java +++ b/Source/plt-web/plt-web-parent/plt-web/src/main/java/com/vci/web/service/impl/UIManagerServiceImpl.java @@ -1,7 +1,5 @@ package com.vci.web.service.impl; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; import com.vci.common.utility.ObjectUtility; import com.vci.corba.common.PLException; import com.vci.corba.common.data.UserEntityInfo; @@ -19,39 +17,35 @@ import com.vci.starter.poi.util.ExcelUtil; import com.vci.starter.web.exception.VciBaseException; import com.vci.starter.web.pagemodel.*; -import com.vci.starter.web.pagemodel.BaseQueryObject; -import com.vci.starter.web.pagemodel.BaseResult; -import com.vci.starter.web.pagemodel.DataGrid; -import com.vci.starter.web.pagemodel.SessionInfo; -import com.vci.starter.web.util.*; import com.vci.starter.web.redis.RedisService; +import com.vci.starter.web.util.*; +import com.vci.starter.web.util.Lcm.BeanUtil; +import com.vci.starter.web.util.Lcm.CollectionUtil; +import com.vci.starter.web.util.Lcm.Func; import com.vci.web.service.OsBtmServiceI; import com.vci.web.service.UIManagerServiceI; -import com.vci.web.util.*; -import com.vci.web.util.BeanUtil; -import com.vci.web.utility.UIDataFetcher; -import org.apache.commons.lang3.StringUtils; -import com.vci.web.util.Func; import com.vci.web.util.PlatformClientUtil; +import com.vci.web.util.RightControlUtil; import com.vci.web.util.UITools; +import com.vci.web.utility.UIDataFetcher; import lombok.AllArgsConstructor; import lombok.NoArgsConstructor; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; + import javax.annotation.Resource; -import javax.swing.tree.TreePath; import java.io.File; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Collectors; import java.util.regex.Pattern; -import java.util.stream.Stream; +import java.util.stream.Collectors; /** - * UI瀹氫箟鏈嶅姟鐣岄潰鐩稿叧鎺ュ彛 + * UI瀹氫箟绠$悊鏈嶅姟鐣岄潰鐩稿叧鎺ュ彛 * @author ludc * @date 2024/8/28 17:05 */ @@ -849,15 +843,17 @@ } /** - * 鏍规嵁涓婁笅鏂嘔D鍜屽尯鍩熺被鍨嬶紝鎸夐『搴忚幏鍙栧綋鍓嶅尯鍩熺殑tab椤� + * 鏍规嵁涓婁笅鏂嘔D鍜屽尯鍩燂紙椤电锛夌被鍨嬶紝鎸夐『搴忚幏鍙栧綋鍓嶅尯鍩熺殑tab椤� */ @Override public DataGrid getTabByContextIdAndType(String contextId, int areaType) throws PLException { VciBaseUtil.alertNotNull(contextId,"涓婁笅鏂囦富閿�",areaType,"鍖哄煙绫诲瀷"); PLTabPage[] plTabPages = platformClientUtil.getUIService().getTabPagesByContextIdAndType(contextId, (short) areaType); + List<PLTabPage> tabPageList = Arrays.stream(plTabPages).sorted(((o1, o2) -> Math.toIntExact(o1.plSeq - o2.plSeq))) + .collect(Collectors.toList()); DataGrid dataGrid = new DataGrid(); dataGrid.setTotal(plTabPages.length); - dataGrid.setData(Arrays.asList(plTabPages)); + dataGrid.setData(tabPageList); return dataGrid; } @@ -880,7 +876,7 @@ } /** - * 淇敼鍖哄煙鏁版嵁 + * 淇敼鍖哄煙锛堥〉绛撅級鏁版嵁 * @param plTabPage * @return */ @@ -897,7 +893,7 @@ } /** - * 鍒犻櫎鍖哄煙鏁版嵁 + * 鍒犻櫎鍖哄煙锛堥〉绛撅級鏁版嵁 * @param oids * @return */ @@ -1469,7 +1465,7 @@ platformClientUtil.getUIService().savePLCommandParameter(plCommandParameter); } catch (PLException e) { e.printStackTrace(); - throw new VciBaseException("淇濆瓨鎸夐挳淇℃伅鏃跺彂鐢熷紓甯革細"+ e.getMessage()); + throw new VciBaseException("淇濆瓨鎸夐挳鍙傛暟鏃跺彂鐢熷紓甯革細"+ e.getMessage()); } } } @@ -1700,12 +1696,9 @@ String type = StringUtils.isBlank(conditionMap.get("type")) ? "" : conditionMap.get("type"); String context = StringUtils.isBlank(conditionMap.get("context")) ? "" : conditionMap.get("context"); boolean showCheckBox = Boolean.parseBoolean(conditionMap.get("showCheckBox")); - Map<String,RoleRightVO> roleRightVOMap = new HashMap<>(); + Map<String, List<RoleRightVO>> roleRightVOMap = new HashMap<>(); if(StringUtils.isNotBlank(roleId)){ - String userName = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(); - RoleRightInfo[] rightInfos = platformClientUtil.getFrameworkService().getRoleRightList(roleId,userName); - List<RoleRightVO> roleRightVOList = roleRightDOO2VOS(Arrays.asList(rightInfos)); - roleRightVOMap = roleRightVOList.stream().collect(Collectors.toMap(RoleRightVO::getFuncId,roleRightVO ->roleRightVO,(oldValue,newOldValue)->oldValue)); + roleRightVOMap = this.getRoleRightMap(roleId); } BizType[] bizTypes = osBtmServiceI.getBizTypes(type); List<Tree> treeList=new ArrayList<>(); @@ -1715,7 +1708,6 @@ rootNode.setExpanded(true); List<Tree> childList=new ArrayList<>(); - //long startTime = System.currentTimeMillis(); uiDataFetcher = new UIDataFetcher(); for (int i = 0; i < bizTypes.length; i++) { Tree bizTypeTree = new Tree(bizTypes[i].oid,bizTypes[i].name,bizTypes[i]);//(btmItems[i].label+" ["+ btmItems[i].name+"]", btmItems[i]); @@ -1724,18 +1716,12 @@ bizTypeTree.setParentId(rootNode.getOid()); bizTypeTree.setParentName(rootNode.getText()); bizTypeTree.setParentBtmName(bizTypes[i].name); - //long startTime1 = System.currentTimeMillis(); List<PLUILayout> contextList = uiDataFetcher.getContext(bizTypes[i].name/*+context*/); - //long endTime1 = System.currentTimeMillis(); - //System.out.println("============================================鑾峰彇UI瀹氫箟鏁版嵁寮曟搸鑰楁椂锛�"+((endTime1-startTime1)/1000)+"s"); - List<Tree> btmChildList = new ArrayList<>(); btmChildList.add(bizTypeTree); setChildNode(btmChildList,contextList,roleRightVOMap,showCheckBox); childList.add(bizTypeTree); } - //long endTime = System.currentTimeMillis(); - //System.out.println("============================================UI瀹氫箟鏍戣绠楀畬姣曡�楁椂锛�"+((endTime-startTime)/1000)+"s"); rootNode.setChildren(childList); treeList.add(rootNode); return treeList; @@ -1743,21 +1729,27 @@ /** * 鏍规嵁瑙掕壊涓婚敭鑾峰彇宸叉巿鏉冪殑淇℃伅 - * @param roleId + * @param roleId 濡傛灉roleId涓嶄紶锛屽氨浼氳幏鍙栧綋鍓嶇櫥褰曠殑鐢ㄦ埛鐨勫悕绉版煡璇㈡潈闄� * @return * @throws PLException */ - /* @Override - public Map<String,RoleRightVO> getRightListByRoleId(String roleId) throws PLException { - VciBaseUtil.alertNotNull(roleId,"鏌ヨ鏉′欢瑙掕壊涓婚敭"); - String userName = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(); - RoleRightInfo[] rightInfos= platformClientUtil.getFrameworkService().getRoleRightList(roleId,userName); - List<RoleRightVO> roleRightVOList = roleRightDOO2VOS(Arrays.asList(rightInfos)); - Map<String,RoleRightVO> roleRightVOMap = roleRightVOList.stream().collect(Collectors.toMap(RoleRightVO::getFuncId,roleRightVO ->roleRightVO,(oldValue,newOldValue)->oldValue)); - return roleRightVOMap; - }*/ + @Override + public Map<String, List<RoleRightVO>> getRoleRightMap(String roleId) throws PLException { + RoleRightInfo[] rightInfos = null; + String userName = WebThreadLocalUtil.getCurrentUserSessionInfoInThread().getUserId(); + if(Func.isBlank(roleId)){ + rightInfos = platformClientUtil.getFrameworkService().getRoleRightByUserName(userName); + }else{ + rightInfos = platformClientUtil.getFrameworkService().getRoleRightList(roleId,userName); + } + List<RoleRightVO> roleRightVOList = roleRightDOO2VOS(Arrays.asList(rightInfos)); + //鍒嗙粍鎿嶄綔 + Map<String, List<RoleRightVO>> roleRightVOMap = roleRightVOList.stream().collect(Collectors.groupingBy(RoleRightVO::getFuncId, + Collectors.mapping(e ->e, Collectors.toList()))); + return roleRightVOMap; + } - /*** + /** * UI鎺堟潈 * @param uiAuthorDTO * @return @@ -1766,7 +1758,7 @@ @Override public boolean authorizedUI(UIAuthorDTO uiAuthorDTO) throws Exception { boolean res=false; - if(uiAuthorDTO==null||CollectionUtil.isEmpty(uiAuthorDTO.getSelectTreeList())){ + if(uiAuthorDTO==null|| CollectionUtil.isEmpty(uiAuthorDTO.getSelectTreeList())){ throw new VciBaseException("璇烽�夋嫨鑺傜偣杩涜鎺堟潈!"); } BaseQueryObject treeQueryObject=new BaseQueryObject(); @@ -2155,7 +2147,7 @@ * @param contextList * @param isShowCheckBox */ - private void setChildNode(List<Tree> parentTree, List<PLUILayout>contextList,Map<String,RoleRightVO> roleRightVOMap, boolean isShowCheckBox){ + private void setChildNode(List<Tree> parentTree, List<PLUILayout>contextList,Map<String, List<RoleRightVO>> roleRightVOMap, boolean isShowCheckBox){ Optional.ofNullable(parentTree).orElseGet(()->new ArrayList<>()).stream().forEach(pTree -> { Object funcObj = pTree.getData(); List<Tree> chiledTreeList = new ArrayList<>(); @@ -2234,8 +2226,8 @@ PLTabButton plTabButton = (PLTabButton) funcObj; String id = plTabButton.plTableOId; if(roleRightVOMap.containsKey(id)){ - RoleRightVO roleRightVO = roleRightVOMap.get(id); - Long rightValue = roleRightVO.getRightValue(); + RoleRightVO roleRightVO = roleRightVOMap.get(id).get(0); + Long rightValue = roleRightVO.getRightValue(); int nodeValue = plTabButton.plSeq; if (nodeValue >= 0 && nodeValue <= 63) { long preValue = (rightValue >> nodeValue) & 1; @@ -3539,7 +3531,7 @@ */ private boolean checkLinkTypeInputIsOk(String txtVIName/*閫夋嫨鐨勬ā鏉�*/,String txtQTName/*鏌ヨ妯℃澘*/,String btmType) throws PLException { boolean res = false; - if(!(this.checkBtmTypeTxtIsOk("鐩爣瀵硅薄", linkType,true))){ + if(!(this.checkLinkTypeTxtIsOk("鐩爣瀵硅薄", linkType,true))){ res = false; } else if(!(this.checkPortalVITxtIsOk("閫夋嫨妯℃澘", txtVIName, linkType,true))){ res = false; @@ -3612,6 +3604,7 @@ d.setSearchTarger(searchTarger); d.setShowType(btmType); d.setTemplateId(txtVIName); + d.setOrientation("positive"); d.setQueryTemplateName(txtQTName); d.setExpandCols(expandCols); d.setExpandMode(expandMode); @@ -3709,6 +3702,7 @@ d.setShowType(btmType); d.setLinkType(linkType); d.setTemplateId(queryTemplateName); + d.setOrientation("positive"); d.setRootContent(showExpressionRoot.trim()); d.setShowAbs(showExpression.trim()); d.setShowLinkAbs(refTreeSet.trim()); @@ -3724,7 +3718,7 @@ return res; } // 閾炬帴绫诲瀷涓嶄负绌烘椂锛岄渶瑕佸悓鏃舵鏌ラ摼鎺ョ被鍨嬪強閾炬帴绫诲瀷涓嬬殑鏌ヨ妯℃澘鏄惁鏈夋晥 - if(Func.isBlank(linkType)){ + if(Func.isNotBlank(linkType)){ if(!(super.checkLinkTypeTxtIsOk("閾炬帴绫诲瀷", linkType,false))){ res = false; return res; -- Gitblit v1.9.3