Forráskód Böngészése

权限管理增加父级角色字段

FengChaoYu 5 hónapja
szülő
commit
8834fbf6db

+ 7 - 4
mall-server-api/src/main/java/com/gree/mall/manager/controller/admin/AdminRoleController.java

@@ -29,11 +29,12 @@ public class AdminRoleController {
     @ApiOperation(value = "角色列表")
     public ResponseHelper<IPage<AdminRole>> list(
             HttpServletRequest request,
-            @ApiParam(value = "商户名称",required = false) @RequestParam(required = false) String companyWechatName,
-            @ApiParam(value = "页号",required = true) @RequestParam(required = true) Integer pageNum,
-            @ApiParam(value = "页大小",required = true) @RequestParam(required = true) Integer pageSize
+            @ApiParam(value = "商户名称") @RequestParam(required = false) String companyWechatName,
+            @ApiParam(value = "父角色名") @RequestParam(required = false) String parentRoleName,
+            @ApiParam(value = "页号",required = true) @RequestParam Integer pageNum,
+            @ApiParam(value = "页大小",required = true) @RequestParam Integer pageSize
     ) throws RemoteServiceException {
-        IPage<AdminRole> adminRoleIPage = adminRoleLogic.listPage(request,companyWechatName,pageNum, pageSize);
+        IPage<AdminRole> adminRoleIPage = adminRoleLogic.listPage(request, companyWechatName, parentRoleName, pageNum, pageSize);
         return ResponseHelper.success(adminRoleIPage);
     }
 
@@ -79,4 +80,6 @@ public class AdminRoleController {
         return ResponseHelper.success(list);
     }
 
+
+
 }

+ 3 - 2
mall-server-api/src/main/java/com/gree/mall/manager/controller/admin/AdminUserController.java

@@ -193,9 +193,10 @@ public class AdminUserController {
     @GetMapping("/module/list")
     @ApiOperation(value = "功能菜单权限列表")
     public ResponseHelper<List<AdminModuleTree>> moduleList(
-            @ApiParam(value = "用户id",required = true) @RequestParam(required = true) String adminUserId
+            @ApiParam(value = "用户id",required = true) @RequestParam(required = true) String adminUserId,
+            @ApiParam(value = "父级角色id") @RequestParam String parentAdminRoleId
     ) throws RemoteServiceException {
-        List<AdminModuleTree> adminModuleTrees = adminUserLogic.queryAdminModule(adminUserId);
+        List<AdminModuleTree> adminModuleTrees = adminUserLogic.queryAdminModule(adminUserId, parentAdminRoleId);
         return ResponseHelper.success(adminModuleTrees);
     }
 

+ 39 - 4
mall-server-api/src/main/java/com/gree/mall/manager/logic/admin/AdminRoleLogic.java

@@ -11,7 +11,9 @@ import com.gree.mall.manager.exception.RemoteServiceException;
 import com.gree.mall.manager.logic.common.CommonLogic;
 import com.gree.mall.manager.plus.entity.AdminRole;
 import com.gree.mall.manager.plus.entity.AdminUser;
+import com.gree.mall.manager.plus.entity.AdminUserModuleRela;
 import com.gree.mall.manager.plus.service.AdminRoleService;
+import com.gree.mall.manager.plus.service.AdminUserModuleRelaService;
 import com.gree.mall.manager.plus.service.AdminUserService;
 import com.gree.mall.manager.plus.service.AdminWebsitService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -34,12 +36,14 @@ public class AdminRoleLogic {
     AdminWebsitService adminWebsitService;
     @Autowired
     CommonLogic commonLogic;
+    @Autowired
+    AdminUserModuleRelaService adminUserModuleRelaService;
 
 
     /**
      * 角色列表
      */
-    public IPage<AdminRole> listPage(HttpServletRequest request ,String companyWechatName, Integer pageNo, Integer pageSize) {
+    public IPage<AdminRole> listPage(HttpServletRequest request, String parentRoleName, String companyWechatName, Integer pageNo, Integer pageSize) {
         AdminUserCom adminUser = commonLogic.getAdminUser(request);
 
         List<String> companyWechatIds = adminUser.getCompanyWechatIds();
@@ -55,6 +59,7 @@ public class AdminRoleLogic {
 
         Page<AdminRole> rolePage = adminRoleService.lambdaQuery()
                 .like(StringUtils.isNotBlank(companyWechatName), AdminRole::getCompanyName, companyWechatName)
+                .like(StringUtils.isNotBlank(parentRoleName), AdminRole::getParentRoleName, parentRoleName)
                 .le(AdminRole::getType, type)
                 .in(CollectionUtils.isNotEmpty(companyWechatIds), AdminRole::getCompanyWechatId, companyWechatIds)
                 .in(CollectionUtils.isNotEmpty(levelList), AdminRole::getLevel, levelList)
@@ -92,6 +97,11 @@ public class AdminRoleLogic {
 
         adminRole.setCompanyWechatId(adminUser.getCompanyWechatId());
         adminRole.setCompanyName(adminUser.getCompanyName());
+        // 父级角色id不为空查询父级角色名填充
+        if (StringUtils.isNotBlank(adminRole.getParentRoleId())) {
+            final AdminRole parentRole = adminRoleService.getById(adminRole.getParentRoleId());
+            adminRole.setParentRoleName(parentRole.getName());
+        }
         adminRoleService.save(adminRole);
     }
 
@@ -119,13 +129,38 @@ public class AdminRoleLogic {
         if (Objects.nonNull(adminRole.getType()) && adminRole.getType() == 0 && adminRole.getLevel() == 0) {
             throw new RemoteServiceException("网点需要选级别");
         }
+
         adminRole.setCompanyWechatId(oldData.getCompanyWechatId())
                 .setCompanyName(oldData.getCompanyName());
-        adminRoleService.updateById(adminRole);
+
+        // 父级角色id不为空查询父级角色名填充
+        if (StringUtils.isNotBlank(adminRole.getParentRoleId())) {
+            final AdminRole parentRole = adminRoleService.getById(adminRole.getParentRoleId());
+            adminRole.setParentRoleName(parentRole.getName());
+        }
 
         if (adminRole.getName() != null) {
-            adminUserService.lambdaUpdate().set(AdminUser::getRoleName, adminRole.getName())
-                    .eq(AdminUser::getRoleId, adminRole.getAdminRoleId()).update();
+            // 更新账号使用对应的角色名
+            adminUserService.lambdaUpdate()
+                    .set(AdminUser::getRoleName, adminRole.getName())
+                    .eq(AdminUser::getRoleId, adminRole.getAdminRoleId())
+                    .update();
+
+            // 更新所有子级的父级角色名
+            adminRoleService.lambdaUpdate()
+                    .set(AdminRole::getParentRoleName, adminRole.getName())
+                    .eq(AdminRole::getParentRoleId, adminRole.getAdminRoleId())
+                    .update();
+        }
+
+        adminRoleService.updateById(adminRole);
+
+        // 本次编辑与历史父级不一致
+        if (!adminRole.getParentRoleId().equals(oldData.getParentRoleId())) {
+            // 清空角色已选权限
+            adminUserModuleRelaService.lambdaUpdate()
+                    .eq(AdminUserModuleRela::getAdminRoleId, oldData.getAdminRoleId())
+                    .remove();
         }
     }
 

+ 58 - 9
mall-server-api/src/main/java/com/gree/mall/manager/logic/admin/AdminUserLogic.java

@@ -775,13 +775,13 @@ public class AdminUserLogic {
     /**
      * 根据登录帐号查询权限模块
      */
-    public List<AdminModuleTree> queryAdminModule(String adminUserId) {
+    public List<AdminModuleTree> queryAdminModule(String adminUserId, String parentAdminRoleId) {
         //String adminUserId = CommonUtils.getUserId(request);
         AdminUser adminUser = adminUserService.getById(adminUserId);
         if (adminUser.getUserName().equals("admin")) {
             return this.queryAdminModuleTree(null, true, null, null);
         } else {
-            return this.queryAdminModuleTree(adminUser.getRoleId(), false, null, adminUser);
+            return this.queryAdminModuleTree(StringUtils.isBlank(parentAdminRoleId) ? adminUser.getRoleId() : parentAdminRoleId, false, null, adminUser);
         }
     }
 
@@ -791,11 +791,12 @@ public class AdminUserLogic {
     @Transactional
     public void grantModules(AdminWebsitGrantBean adminWebsitGrantBean) {
         String roleId = adminWebsitGrantBean.getAdminRoleId();
-        //1.清空该角色的权限
-        adminUserModuleRelaService.lambdaUpdate().eq(AdminUserModuleRela::getAdminRoleId, roleId).remove();
+        final Integer subSize = adminRoleService.lambdaQuery()
+                .eq(AdminRole::getParentRoleId, roleId)
+                .count();
 
-        //2.生成权限
-        List<AdminUserModuleRela> list = new ArrayList<>();
+        //1.生成权限
+        List<AdminUserModuleRela> newList = new ArrayList<>();
         for (String adminModuleId : adminWebsitGrantBean.getAdminModuleIds()) {
             AdminUserModuleRela adminUserModuleRela = new AdminUserModuleRela();
             adminUserModuleRela.setAdminRoleId(roleId);
@@ -803,7 +804,7 @@ public class AdminUserLogic {
             adminUserModuleRela.setStatus(true);
             adminUserModuleRela.setAdminModuleId(adminModuleId);
             adminUserModuleRela.setFlag(1);
-            list.add(adminUserModuleRela);
+            newList.add(adminUserModuleRela);
         }
         for (String adminModuleId : adminWebsitGrantBean.getAdminModuleIds2()) {
             AdminUserModuleRela adminUserModuleRela = new AdminUserModuleRela();
@@ -812,9 +813,57 @@ public class AdminUserLogic {
             adminUserModuleRela.setStatus(true);
             adminUserModuleRela.setAdminModuleId(adminModuleId);
             adminUserModuleRela.setFlag(0);
-            list.add(adminUserModuleRela);
+            newList.add(adminUserModuleRela);
+        }
+
+        // 当前角色授权存在子角色,需要对比新旧数据,新加权限不处理,找出去掉的权限清除子角色的相应权限
+        if (subSize > 0) {
+            final List<AdminUserModuleRela> oldRelaList = adminUserModuleRelaService.lambdaQuery().eq(AdminUserModuleRela::getAdminRoleId, roleId).list();
+            // 对比出新数据没,旧数据有的roleId
+            final List<String> newModuleIds = newList.stream().map(AdminUserModuleRela::getAdminModuleId).collect(Collectors.toList());
+            List<String> removeSubModuleList = new ArrayList<>();
+            for (AdminUserModuleRela oldRela : oldRelaList) {
+                if (newModuleIds.contains(oldRela.getAdminModuleId())) {
+                    continue;
+                }
+                removeSubModuleList.add(oldRela.getAdminModuleId());
+            }
+            if (CollectionUtil.isNotEmpty(removeSubModuleList)) {
+                // 删除子角色关联菜单
+                this.removeRelaSubModule(roleId, removeSubModuleList);
+            }
+        }
+
+        //2.清空该角色的权限
+        adminUserModuleRelaService.lambdaUpdate().eq(AdminUserModuleRela::getAdminRoleId, roleId).remove();
+
+        adminUserModuleRelaService.saveBatch(newList);
+    }
+
+    // 递归执行删除子角色关联菜单
+    private void removeRelaSubModule(String parentRoleId, List<String> removeSubModuleList) {
+        final List<AdminRole> subRoleList = adminRoleService.lambdaQuery()
+                .select(AdminRole::getAdminRoleId)
+                .eq(AdminRole::getParentRoleId, parentRoleId)
+                .list();
+
+        if (CollectionUtil.isNotEmpty(subRoleList)) {
+            final List<String> roleIds = subRoleList.stream()
+                    .map(AdminRole::getAdminRoleId)
+                    .collect(Collectors.toList());
+
+            for (String moduleId : removeSubModuleList) {
+                adminUserModuleRelaService.lambdaUpdate()
+                        .eq(AdminUserModuleRela::getAdminModuleId, moduleId)
+                        .in(AdminUserModuleRela::getAdminRoleId, roleIds)
+                        .remove();
+            }
+
+            for (String roleId : roleIds) {
+                this.removeRelaSubModule(roleId, removeSubModuleList);
+            }
         }
-        adminUserModuleRelaService.saveBatch(list);
+
     }
 
     /**