Parcourir la source

#FIX 角色多系统类型菜单权限被覆盖问题

谭斌 il y a 1 an
Parent
commit
93b621b6c5

+ 16 - 5
authorize-api-service/src/main/java/com/xy/service/impl/SysRoleServiceImpl.java

@@ -11,10 +11,7 @@ import com.xy.consts.CommConsts;
 import com.xy.dto.BatchDeleteDto;
 import com.xy.dto.CommDto;
 import com.xy.dto.SysRoleDto;
-import com.xy.entity.SysDeptRole;
-import com.xy.entity.SysRole;
-import com.xy.entity.SysRoleMenu;
-import com.xy.entity.SysUserRole;
+import com.xy.entity.*;
 import com.xy.mapper.SysRoleMapper;
 import com.xy.redis.RedisCache;
 import com.xy.service.SysDeptRoleService;
@@ -56,6 +53,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
     private final SysRoleMenuService sysRoleMenuService;
     private final SysDeptRoleService sysDeptRoleService;
     private final SysUserRoleService sysUserRoleService;
+    private final SysMenuServiceImpl sysMenuService;
 
     @ApiOperation(value = "新增、更新角色信息", notes = "新增、更新角色信息")
     @PostMapping("saveOrUpdate")
@@ -81,7 +79,20 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
             }
 
             Long sysRoleId = sysRole.getId();
-            sysRoleMenuService.remove(Wrappers.<SysRoleMenu>lambdaQuery().eq(SysRoleMenu::getRoleId, sysRoleId));
+            String clientType = sysRoleDto.getClientType();
+            if (StrUtil.isNotEmpty(clientType)) {
+                //如果有客户端类型,只能移除次客户端类型对应的菜单
+                List<SysMenu> sysMenus = sysMenuService.list(Wrappers.<SysMenu>lambdaQuery().eq(SysMenu::getClientType, clientType).eq(SysMenu::getSysId, sysRoleDto.getSysId()));
+                if (CollUtil.isNotEmpty(sysMenus)) {
+                    List<Long> mIds = sysMenus.stream().map(SysMenu::getId).collect(Collectors.toList());
+                    sysRoleMenuService.remove(Wrappers.<SysRoleMenu>lambdaQuery().eq(SysRoleMenu::getRoleId, sysRoleId)
+                            .in(SysRoleMenu::getMenuId, mIds)
+                    );
+
+                }
+            } else {
+                sysRoleMenuService.remove(Wrappers.<SysRoleMenu>lambdaQuery().eq(SysRoleMenu::getRoleId, sysRoleId));
+            }
 
             //角色菜单绑定
             Boolean finalSelectAdmin = selectAdmin;

+ 3 - 0
authorize-api/src/main/java/com/xy/dto/SysRoleDto.java

@@ -25,6 +25,9 @@ public class SysRoleDto {
         @ApiModelProperty(value = "角色ID")
         private Long id;
 
+        @ApiModelProperty(value = "菜单客户端类型,枚举:menu_client_type")
+        private String clientType;
+
         @NotNull(message = "所属系统不可为空")
         @ApiModelProperty(value = "系统", required = true)
         private Long sysId;