diff --git a/dao/src/main/java/cn/bunny/dao/dto/system/router/AssignRolesToRoutersDto.java b/dao/src/main/java/cn/bunny/dao/dto/system/router/AssignRolesToRoutersDto.java index 1ecbba1..aff4b03 100644 --- a/dao/src/main/java/cn/bunny/dao/dto/system/router/AssignRolesToRoutersDto.java +++ b/dao/src/main/java/cn/bunny/dao/dto/system/router/AssignRolesToRoutersDto.java @@ -19,7 +19,7 @@ public class AssignRolesToRoutersDto { @Schema(name = "routerId", title = "路由id") @NotNull(message = "路由id不能为空") - private Long routerId; + private List routerIds; @Schema(name = "roleIds", title = "角色id列表") @NotNull(message = "角色id列表不能为空") diff --git a/service/src/main/java/cn/bunny/services/controller/RouterRoleController.java b/service/src/main/java/cn/bunny/services/controller/RouterRoleController.java index f56d373..4ed522b 100644 --- a/service/src/main/java/cn/bunny/services/controller/RouterRoleController.java +++ b/service/src/main/java/cn/bunny/services/controller/RouterRoleController.java @@ -40,4 +40,11 @@ public class RouterRoleController { routerRoleService.assignRolesToRouter(dto); return Mono.just(Result.success()); } + + @Operation(summary = "清除选中菜单所有角色", description = "清除选中菜单所有角色") + @DeleteMapping("clearAllRolesSelect") + public Mono> clearAllRolesSelect(@RequestBody List routerIds) { + routerRoleService.clearAllRolesSelect(routerIds); + return Mono.just(Result.success()); + } } diff --git a/service/src/main/java/cn/bunny/services/service/RouterRoleService.java b/service/src/main/java/cn/bunny/services/service/RouterRoleService.java index d353e2e..4155480 100644 --- a/service/src/main/java/cn/bunny/services/service/RouterRoleService.java +++ b/service/src/main/java/cn/bunny/services/service/RouterRoleService.java @@ -30,4 +30,11 @@ public interface RouterRoleService extends IService { * @param dto 路由分配角色 */ void assignRolesToRouter(AssignRolesToRoutersDto dto); + + /** + * 清除选中菜单所有角色 + * + * @param routerIds 路由id + */ + void clearAllRolesSelect(List routerIds); } diff --git a/service/src/main/java/cn/bunny/services/service/impl/RouterRoleServiceImpl.java b/service/src/main/java/cn/bunny/services/service/impl/RouterRoleServiceImpl.java index caa1e4a..f3880ee 100644 --- a/service/src/main/java/cn/bunny/services/service/impl/RouterRoleServiceImpl.java +++ b/service/src/main/java/cn/bunny/services/service/impl/RouterRoleServiceImpl.java @@ -1,7 +1,9 @@ package cn.bunny.services.service.impl; +import cn.bunny.common.service.exception.BunnyException; import cn.bunny.dao.dto.system.router.AssignRolesToRoutersDto; import cn.bunny.dao.entity.system.RouterRole; +import cn.bunny.dao.pojo.result.ResultCodeEnum; import cn.bunny.services.mapper.RouterRoleMapper; import cn.bunny.services.service.RouterRoleService; import com.baomidou.mybatisplus.core.toolkit.Wrappers; @@ -9,6 +11,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; import java.util.List; /** @@ -42,19 +45,38 @@ public class RouterRoleServiceImpl extends ServiceImpl routerIds = dto.getRouterIds(); List roleIds = dto.getRoleIds(); - // 删除这个用户下所有已经分配好的角色内容 - baseMapper.deleteBatchIdsByRouterIdsWithPhysics(List.of(routerId)); + // 删除这个路由下所有已经分配好的角色内容 + baseMapper.deleteBatchIdsByRouterIdsWithPhysics(routerIds); // 保存分配好的角色信息 - List roleList = roleIds.stream().map(roleId -> { - RouterRole routerRole = new RouterRole(); - routerRole.setRouterId(routerId); - routerRole.setRoleId(roleId); - return routerRole; - }).toList(); + List roleList = new ArrayList<>(); + for (Long roleId : roleIds) { + List list = routerIds.stream().map(routerId -> { + RouterRole routerRole = new RouterRole(); + routerRole.setRouterId(routerId); + routerRole.setRoleId(roleId); + return routerRole; + }).toList(); + + roleList.addAll(list); + } + saveBatch(roleList); } + + /** + * 清除选中菜单所有角色 + * + * @param routerIds 路由id + */ + @Override + public void clearAllRolesSelect(List routerIds) { + if (routerIds.isEmpty()) { + throw new BunnyException(ResultCodeEnum.REQUEST_IS_EMPTY); + } + baseMapper.deleteBatchIdsByRouterIdsWithPhysics(routerIds); + } } diff --git a/service/src/main/java/cn/bunny/services/service/impl/RouterServiceImpl.java b/service/src/main/java/cn/bunny/services/service/impl/RouterServiceImpl.java index 4186499..d74aac3 100644 --- a/service/src/main/java/cn/bunny/services/service/impl/RouterServiceImpl.java +++ b/service/src/main/java/cn/bunny/services/service/impl/RouterServiceImpl.java @@ -6,15 +6,17 @@ import cn.bunny.dao.dto.system.router.RouterAddDto; import cn.bunny.dao.dto.system.router.RouterManageDto; import cn.bunny.dao.dto.system.router.RouterUpdateByIdWithRankDto; import cn.bunny.dao.dto.system.router.RouterUpdateDto; +import cn.bunny.dao.entity.system.Power; +import cn.bunny.dao.entity.system.Role; import cn.bunny.dao.entity.system.Router; -import cn.bunny.dao.pojo.constant.RedisUserConstant; import cn.bunny.dao.pojo.result.PageResult; import cn.bunny.dao.pojo.result.ResultCodeEnum; import cn.bunny.dao.vo.system.router.RouterManageVo; import cn.bunny.dao.vo.system.router.RouterMeta; import cn.bunny.dao.vo.system.router.UserRouterVo; -import cn.bunny.dao.vo.system.user.LoginVo; import cn.bunny.services.factory.RouterServiceFactory; +import cn.bunny.services.mapper.PowerMapper; +import cn.bunny.services.mapper.RoleMapper; import cn.bunny.services.mapper.RouterMapper; import cn.bunny.services.security.custom.CustomCheckIsAdmin; import cn.bunny.services.service.RouterService; @@ -25,7 +27,6 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; @@ -49,7 +50,10 @@ public class RouterServiceImpl extends ServiceImpl impleme private RouterServiceFactory routerServiceFactory; @Autowired - private RedisTemplate redisTemplate; + private RoleMapper roleMapper; + + @Autowired + private PowerMapper powerMapper; /** * * 获取路由内容 @@ -58,17 +62,16 @@ public class RouterServiceImpl extends ServiceImpl impleme */ @Override public List getRouterAsync() { - // 当前用户id - String username = BaseContext.getUsername(); + // 根据用户ID查询角色数据 + Long userId = BaseContext.getUserId(); - LoginVo loginVo = (LoginVo) redisTemplate.opsForValue().get(RedisUserConstant.getAdminLoginInfoPrefix(username)); - if (loginVo == null) throw new BunnyException(ResultCodeEnum.FAIL); + // 查询角色信息 + List roleList = roleMapper.selectListByUserId(userId); + List roleCodeList = roleList.stream().map(Role::getRoleCode).toList(); - // 角色列表 - List roleList = loginVo.getRoles(); - - // 权限列表 - List powerCodeList = loginVo.getPermissions(); + // 根据角色列表查询权限信息 + List powerList = powerMapper.selectListByUserId(userId); + List powerCodeList = powerList.stream().map(Power::getPowerCode).toList(); // 路由列表,根据用户角色判断 List routerList; @@ -77,10 +80,10 @@ public class RouterServiceImpl extends ServiceImpl impleme List list = new ArrayList<>(); // 查询用户角色,判断是否是管理员角色 - boolean isAdmin = CustomCheckIsAdmin.checkAdmin(roleList); + boolean isAdmin = CustomCheckIsAdmin.checkAdmin(roleCodeList); if (isAdmin) routerList = list(); else { - List routerIds = baseMapper.selectListByUserId(loginVo.getId()); + List routerIds = baseMapper.selectListByUserId(userId); routerList = baseMapper.selectParentListByRouterId(routerIds); } @@ -99,7 +102,7 @@ public class RouterServiceImpl extends ServiceImpl impleme .rank(router.getRouterRank()) .icon(router.getIcon()) .title(router.getTitle()) - .roles(roleList) + .roles(roleCodeList) .auths(powerCodeList) .build(); diff --git a/service/src/main/resources/mapper/RouterMapper.xml b/service/src/main/resources/mapper/RouterMapper.xml index 003f640..8286aa0 100644 --- a/service/src/main/resources/mapper/RouterMapper.xml +++ b/service/src/main/resources/mapper/RouterMapper.xml @@ -24,7 +24,7 @@ - id, parent_id, path, component, frame_src, route_name, title, menuType, icon, router_rank, visible, create_user, update_user, update_time, create_time, is_deleted + id, parent_id, path, component, frame_src, route_name, title, menu_type, icon, router_rank, visible, create_user, update_user, update_time, create_time, is_deleted