From 7371051db9b19381f42165153d17758a90d68f33 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期日, 29 十月 2023 00:24:36 +0800
Subject: [PATCH] 修改主数据按钮查询权限接口,VciBaseUtil中增加校验当前用户是否为配置的超管用户方法

---
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java             |    3 -
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java                  |    3 +
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/MenuMapper.java                |    3 +
 Source/UBCS/ubcs-service-api/ubcs-util-api/pom.xml                                                           |    6 +++
 Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java      |   11 +++++
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleMenuServiceImpl.java |   10 +----
 Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java     |   32 ++++++++++-----
 Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MenuMapper.xml                                |   13 +++++-
 8 files changed, 56 insertions(+), 25 deletions(-)

diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/pom.xml b/Source/UBCS/ubcs-service-api/ubcs-util-api/pom.xml
index beebe47..ebb7db8 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-util-api/pom.xml
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/pom.xml
@@ -54,5 +54,11 @@
             <groupId>org.springblade</groupId>
             <artifactId>blade-starter-log</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.vci.ubcs</groupId>
+            <artifactId>ubcs-system-api</artifactId>
+            <version>3.0.1.RELEASE</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 </project>
diff --git a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java
index b79d2c4..16be325 100644
--- a/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java
+++ b/Source/UBCS/ubcs-service-api/ubcs-util-api/src/main/java/com/vci/ubcs/starter/web/util/VciBaseUtil.java
@@ -17,8 +17,10 @@
 import com.vci.ubcs.starter.web.pagemodel.SessionInfo;
 import com.vci.ubcs.starter.web.toolmodel.DateConverter;
 import com.vci.ubcs.starter.web.wrapper.VciQueryWrapperForDO;
+import com.vci.ubcs.system.cache.NacosConfigCache;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.utils.Func;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.ResourceUtils;
@@ -52,6 +54,15 @@
 	public VciBaseUtil() {
 	}
 
+	/**
+	 * 妫�鏌ユ槸鍚︿负閰嶇疆鐨勮秴绠$鎴峰拰鐢ㄦ埛
+	 * @return false涓嶆槸瓒呯锛宼rue鏄秴绠�
+	 */
+	public static Boolean checkAdminTenant(){
+		return NacosConfigCache.getAdminUserInfo().getTenantId().equals(AuthUtil.getTenantId())
+			&& NacosConfigCache.getAdminUserInfo().getUserName().equals(AuthUtil.getUserName());
+	}
+
 	public static String getPk() {
 		return String.valueOf(getPKLong(1,1));
 	}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java
index 3d7742b..20ddb06 100644
--- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/feign/SysClient.java
@@ -21,6 +21,7 @@
 import com.vci.ubcs.system.vo.DeptVO;
 import com.vci.ubcs.system.vo.RoleVO;
 import lombok.AllArgsConstructor;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tenant.annotation.NonDS;
 import org.springblade.core.tool.api.R;
 import org.springframework.web.bind.annotation.*;
@@ -81,7 +82,7 @@
 	@Override
 	@GetMapping(MENU_BUTTON)
 	public R<List<Menu>> getMenuButtonByType(String btmType) {
-		return R.data(menuService.getMenuButtonByType(btmType));
+		return R.data(menuService.getMenuButtonByType(btmType, AuthUtil.getUserId()));
 	}
 
 	@Override
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/MenuMapper.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/MenuMapper.java
index 44d84a6..84efde9 100644
--- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/MenuMapper.java
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/mapper/MenuMapper.java
@@ -125,12 +125,13 @@
 	 * @return
 	 */
 	List<Menu> allMenu();
+
 	/**
 	 * 鏍规嵁涓氬姟绫诲瀷鏌ヨ鑿滃崟鐨勫瓙鎸夐挳
 	 *
 	 * @return
 	 */
-	List<Menu> selectMenuChildByBtnType(String btmType);
+	List<Menu> selectMenuChildByBtnType(String btmType,List<String> roleIds);
 
 	/**
 	 * 鏉冮檺閰嶇疆鑿滃崟
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java
index 215d399..1f8a2cd 100644
--- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/IMenuService.java
@@ -168,11 +168,10 @@
 
 	/**
 	 * 鑾峰彇鑿滃崟涓嬮潰鐨勬寜閽�
-	 *
 	 * @param btmType 涓氬姟绫诲瀷
 	 * @return List<Menu>
 	 */
-	List<Menu> getMenuButtonByType(String btmType);
+	List<Menu> getMenuButtonByType(String btmType,Long userId);
 
 	/**
 	 * 鏍规嵁code鍜岀敤鎴穒d鏌ヨ鑿滃崟淇℃伅
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java
index 23d66c4..b2b00e7 100644
--- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/MenuServiceImpl.java
@@ -16,11 +16,13 @@
  */
 package com.vci.ubcs.system.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.vci.ubcs.starter.util.MybatisParameterUtil;
+import com.vci.ubcs.starter.web.util.VciBaseUtil;
 import com.vci.ubcs.system.cache.NacosConfigCache;
 import com.vci.ubcs.system.cache.SysCache;
 import com.vci.ubcs.system.dto.MenuDTO;
@@ -69,7 +71,6 @@
 	private final ITopMenuSettingService topMenuSettingService;
 	private final static String PARENT_ID = "parentId";
 	private final static Integer MENU_CATEGORY = 1;
-	private final NacosConfigCache nacosConfigCache;
 
 	@Override
 	public List<MenuVO> lazyList(Long parentId, Map<String, Object> param) {
@@ -96,7 +97,8 @@
 		List<Menu> allMenus = baseMapper.allMenu();
 		List<Menu> roleMenus;
 		// 瓒呯骇绠$悊鍛樺苟涓斾笉鏄《閮ㄨ彍鍗曡姹傚垯杩斿洖鍏ㄩ儴鑿滃崟
-		if (AuthUtil.isAdministrator() && Func.isEmpty(topMenuId)) {
+		// if (AuthUtil.isAdministrator() && Func.isEmpty(topMenuId)) {
+		if (VciBaseUtil.checkAdminTenant() && Func.isEmpty(topMenuId)) {
 			roleMenus = allMenus;
 		}
 		// 闈炶秴绾х鐞嗗憳骞朵笖涓嶆槸椤堕儴鑿滃崟璇锋眰鍒欒繑鍥炲搴旇鑹叉潈闄愯彍鍗�
@@ -139,7 +141,7 @@
 
 	@Override
 	public List<MenuVO> buttons(String roleId) {
-		List<Menu> buttons = (AuthUtil.isAdministrator()) ? baseMapper.allButtons() : baseMapper.buttons(Func.toLongList(roleId));
+		List<Menu> buttons = (VciBaseUtil.checkAdminTenant()) ? baseMapper.allButtons() : baseMapper.buttons(Func.toLongList(roleId));
 		MenuWrapper menuWrapper = new MenuWrapper();
 		return menuWrapper.listNodeVO(buttons);
 	}
@@ -161,7 +163,7 @@
 
 	@Override
 	public List<TreeNode> grantTopTree(BladeUser user) {
-		List<TreeNode> menuTree = user.getTenantId().equals(nacosConfigCache.getAdminUserInfo().getTenantId()) ? baseMapper.grantTopTree() : baseMapper.grantTopTreeByRole(Func.toLongList(user.getRoleId()));
+		List<TreeNode> menuTree = user.getTenantId().equals(NacosConfigCache.getAdminUserInfo().getTenantId()) ? baseMapper.grantTopTree() : baseMapper.grantTopTreeByRole(Func.toLongList(user.getRoleId()));
 		return ForestNodeMerger.merge(tenantPackageTree(menuTree, user.getTenantId()));
 	}
 
@@ -224,12 +226,12 @@
 
 	@Override
 	public List<TreeNode> grantDataScopeTree(BladeUser user) {
-		return ForestNodeMerger.merge(user.getTenantId().equals(nacosConfigCache.getAdminUserInfo().getTenantId()) ? baseMapper.grantDataScopeTree() : baseMapper.grantDataScopeTreeByRole(Func.toLongList(user.getRoleId())));
+		return ForestNodeMerger.merge(user.getTenantId().equals(NacosConfigCache.getAdminUserInfo().getTenantId()) ? baseMapper.grantDataScopeTree() : baseMapper.grantDataScopeTreeByRole(Func.toLongList(user.getRoleId())));
 	}
 
 	@Override
 	public List<TreeNode> grantApiScopeTree(BladeUser user) {
-		return ForestNodeMerger.merge(user.getTenantId().equals(nacosConfigCache.getAdminUserInfo().getTenantId()) ? baseMapper.grantApiScopeTree() : baseMapper.grantApiScopeTreeByRole(Func.toLongList(user.getRoleId())));
+		return ForestNodeMerger.merge(user.getTenantId().equals(NacosConfigCache.getAdminUserInfo().getTenantId()) ? baseMapper.grantApiScopeTree() : baseMapper.grantApiScopeTreeByRole(Func.toLongList(user.getRoleId())));
 	}
 
 	@Override
@@ -309,9 +311,19 @@
 		return saveOrUpdate(menu);
 	}
 
+	/**
+	 * 鑾峰彇鑿滃崟涓嬮潰鐨勬寜閽�
+	 * @param btmType 涓氬姟绫诲瀷
+	 * @return List<Menu>
+	 */
     @Override
-    public List<Menu> getMenuButtonByType(String btmType) {
-		return baseMapper.selectMenuChildByBtnType(btmType);
+	@Cacheable(cacheNames = MENU_CACHE, key = "'auth:menuButton:' + #userId")
+    public List<Menu> getMenuButtonByType(String btmType,Long userId) {
+		List<String> roleIds = null;
+		if(!VciBaseUtil.checkAdminTenant()){
+			roleIds = Arrays.asList(AuthUtil.getUser().getRoleId().split(","));
+		}
+		return baseMapper.selectMenuChildByBtnType(btmType,roleIds);
     }
 
 	/**
@@ -333,9 +345,7 @@
 			.eq(Menu::getCategory,1) /*鑿滃崟绫诲瀷涓嶈兘涓烘寜閽�*/
 			.orderByAsc(Menu::getCode);  /*鏍规嵁code鎺掑簭涓巆lassify鐨刡tmtypeid瀵瑰簲*/
 		// 瓒呯涓嶇敤鏍规嵁瑙掕壊鏉ユ煡璇�
-		if(!AuthUtil.getTenantId().equals(NacosConfigCache.getAdminUserInfo().getTenantId())
-			&& !AuthUtil.getUserId().equals(NacosConfigCache.getAdminUserInfo().getUserId())
-		){
+		if(!VciBaseUtil.checkAdminTenant()){
 			if(Func.isBlank(userId.toString()) && Func.isBlank(AuthUtil.getUserId().toString())){
 				throw new ServiceException("鑾峰彇鐢ㄦ埛id澶辫触");
 			}
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleMenuServiceImpl.java b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleMenuServiceImpl.java
index d596d8e..dc02fbd 100644
--- a/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleMenuServiceImpl.java
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/java/com/vci/ubcs/system/service/impl/RoleMenuServiceImpl.java
@@ -53,20 +53,14 @@
 	private IUserClient userClient;
 
 	/**
-	 * 鏍规嵁鐢ㄦ埛id鏌ヨ锛岃鎺堟潈鐨勮彍鍗昳d
+	 * 鏍规嵁鐢ㄦ埛id鏌ヨ瑙掕壊id锛屽啀鏌ヨ琚巿鏉冪殑鑿滃崟id
 	 * @param userId
 	 * @return
 	 */
 	@Override
 	public List<Long> getMenuIdByUserId(Long userId) {
-		// 鏍规嵁鐢ㄦ埛id鏌ヨ鑿滃崟id
-		R<User> userR = userClient.userInfoById((Func.isEmpty(userId) ? AuthUtil.getUserId():userId));
-		if (!userR.isSuccess() || Func.isEmpty(userR.getData())) {
-			throw new ServiceException("鐢ㄦ埛淇℃伅鏌ヨ澶辫触,鍘熷洜锛�"+userR.getMsg());
-		}
-
 		// 褰撴煡璇㈡潯浠秈n澶т簬涓�鍗冩潯鏃�
-		List<String> roleIdList = Func.toStrList(userR.getData().getRoleId());
+		List<String> roleIdList = Func.toStrList(AuthUtil.getUser().getRoleId());
 		//鏋勫缓鏌ヨ鑿滃崟id鐨勬煡璇㈡潯浠�
 		LambdaQueryWrapper<RoleMenu> roleMenuWrapper = Wrappers.<RoleMenu>query()
 			.lambda().select(RoleMenu::getMenuId);
diff --git a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MenuMapper.xml b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MenuMapper.xml
index 6877a21..e2cdeb6 100644
--- a/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MenuMapper.xml
+++ b/Source/UBCS/ubcs-service/ubcs-system/src/main/resources/mapper/MenuMapper.xml
@@ -483,11 +483,20 @@
 
     <select id="selectMenuChildByBtnType" resultMap="menuResultMap">
         select pm.*
-        from pl_sys_menu ps, pl_sys_menu pm
+            from pl_sys_menu ps, pl_sys_menu pm
         where pm.is_deleted = 0
           and ps.category = 1
           and ps.CODE = #{btmType}
-          and ps.id = pm.parent_id order by pm.sort asc
+          and ps.ID = pm.PARENT_ID
+            <if test="roleIds != null and roleIds != ''">
+                and ps.ID in (
+                    SELECT menu_id FROM pl_org_role_menu WHERE role_id IN
+                    <foreach collection="roleIds" index="index" item="item" open="(" separator="," close=")">
+                        #{item}
+                    </foreach>
+                )
+            </if>
+        order by pm.sort asc
     </select>
 
 </mapper>

--
Gitblit v1.9.3