🐛 fix: 用户根据角色获取菜单问题
This commit is contained in:
parent
bf62e081c0
commit
d1a2f5a59a
|
@ -19,7 +19,7 @@ public class AssignRolesToRoutersDto {
|
|||
|
||||
@Schema(name = "routerId", title = "路由id")
|
||||
@NotNull(message = "路由id不能为空")
|
||||
private Long routerId;
|
||||
private List<Long> routerIds;
|
||||
|
||||
@Schema(name = "roleIds", title = "角色id列表")
|
||||
@NotNull(message = "角色id列表不能为空")
|
||||
|
|
|
@ -40,4 +40,11 @@ public class RouterRoleController {
|
|||
routerRoleService.assignRolesToRouter(dto);
|
||||
return Mono.just(Result.success());
|
||||
}
|
||||
|
||||
@Operation(summary = "清除选中菜单所有角色", description = "清除选中菜单所有角色")
|
||||
@DeleteMapping("clearAllRolesSelect")
|
||||
public Mono<Result<String>> clearAllRolesSelect(@RequestBody List<Long> routerIds) {
|
||||
routerRoleService.clearAllRolesSelect(routerIds);
|
||||
return Mono.just(Result.success());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -30,4 +30,11 @@ public interface RouterRoleService extends IService<RouterRole> {
|
|||
* @param dto 路由分配角色
|
||||
*/
|
||||
void assignRolesToRouter(AssignRolesToRoutersDto dto);
|
||||
|
||||
/**
|
||||
* 清除选中菜单所有角色
|
||||
*
|
||||
* @param routerIds 路由id
|
||||
*/
|
||||
void clearAllRolesSelect(List<Long> routerIds);
|
||||
}
|
||||
|
|
|
@ -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<RouterRoleMapper, RouterR
|
|||
*/
|
||||
@Override
|
||||
public void assignRolesToRouter(AssignRolesToRoutersDto dto) {
|
||||
Long routerId = dto.getRouterId();
|
||||
List<Long> routerIds = dto.getRouterIds();
|
||||
List<Long> roleIds = dto.getRoleIds();
|
||||
|
||||
// 删除这个用户下所有已经分配好的角色内容
|
||||
baseMapper.deleteBatchIdsByRouterIdsWithPhysics(List.of(routerId));
|
||||
// 删除这个路由下所有已经分配好的角色内容
|
||||
baseMapper.deleteBatchIdsByRouterIdsWithPhysics(routerIds);
|
||||
|
||||
// 保存分配好的角色信息
|
||||
List<RouterRole> roleList = roleIds.stream().map(roleId -> {
|
||||
RouterRole routerRole = new RouterRole();
|
||||
routerRole.setRouterId(routerId);
|
||||
routerRole.setRoleId(roleId);
|
||||
return routerRole;
|
||||
}).toList();
|
||||
List<RouterRole> roleList = new ArrayList<>();
|
||||
for (Long roleId : roleIds) {
|
||||
List<RouterRole> 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<Long> routerIds) {
|
||||
if (routerIds.isEmpty()) {
|
||||
throw new BunnyException(ResultCodeEnum.REQUEST_IS_EMPTY);
|
||||
}
|
||||
baseMapper.deleteBatchIdsByRouterIdsWithPhysics(routerIds);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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<RouterMapper, Router> impleme
|
|||
private RouterServiceFactory routerServiceFactory;
|
||||
|
||||
@Autowired
|
||||
private RedisTemplate<String, Object> redisTemplate;
|
||||
private RoleMapper roleMapper;
|
||||
|
||||
@Autowired
|
||||
private PowerMapper powerMapper;
|
||||
|
||||
/**
|
||||
* * 获取路由内容
|
||||
|
@ -58,17 +62,16 @@ public class RouterServiceImpl extends ServiceImpl<RouterMapper, Router> impleme
|
|||
*/
|
||||
@Override
|
||||
public List<UserRouterVo> 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<Role> roleList = roleMapper.selectListByUserId(userId);
|
||||
List<String> roleCodeList = roleList.stream().map(Role::getRoleCode).toList();
|
||||
|
||||
// 角色列表
|
||||
List<String> roleList = loginVo.getRoles();
|
||||
|
||||
// 权限列表
|
||||
List<String> powerCodeList = loginVo.getPermissions();
|
||||
// 根据角色列表查询权限信息
|
||||
List<Power> powerList = powerMapper.selectListByUserId(userId);
|
||||
List<String> powerCodeList = powerList.stream().map(Power::getPowerCode).toList();
|
||||
|
||||
// 路由列表,根据用户角色判断
|
||||
List<Router> routerList;
|
||||
|
@ -77,10 +80,10 @@ public class RouterServiceImpl extends ServiceImpl<RouterMapper, Router> impleme
|
|||
List<UserRouterVo> list = new ArrayList<>();
|
||||
|
||||
// 查询用户角色,判断是否是管理员角色
|
||||
boolean isAdmin = CustomCheckIsAdmin.checkAdmin(roleList);
|
||||
boolean isAdmin = CustomCheckIsAdmin.checkAdmin(roleCodeList);
|
||||
if (isAdmin) routerList = list();
|
||||
else {
|
||||
List<Long> routerIds = baseMapper.selectListByUserId(loginVo.getId());
|
||||
List<Long> routerIds = baseMapper.selectListByUserId(userId);
|
||||
routerList = baseMapper.selectParentListByRouterId(routerIds);
|
||||
}
|
||||
|
||||
|
@ -99,7 +102,7 @@ public class RouterServiceImpl extends ServiceImpl<RouterMapper, Router> impleme
|
|||
.rank(router.getRouterRank())
|
||||
.icon(router.getIcon())
|
||||
.title(router.getTitle())
|
||||
.roles(roleList)
|
||||
.roles(roleCodeList)
|
||||
.auths(powerCodeList)
|
||||
.build();
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
|
||||
<!-- 通用查询结果列 -->
|
||||
<sql id="Base_Column_List">
|
||||
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
|
||||
</sql>
|
||||
|
||||
<!-- 物理删除路由菜单 -->
|
||||
|
|
Loading…
Reference in New Issue