@ApiOperation(value = "根据用户获取角色数据")
@GetMapping("/toAssign/{userId}")
public Result toAssign(@PathVariable Long userId) {
Map<String, Object> roleMap = sysRoleService.findRoleByAdminId(userId);
return Result.ok(roleMap);
}
@ApiOperation(value = "根据用户分配角色")
@PostMapping("/doAssign")
public Result doAssign(@RequestBody AssginRoleVo assginRoleVo) {
sysRoleService.doAssign(assginRoleVo);
return Result.ok();
}
service接口实现
操作类:SysRoleServiceImpl
@Autowired
private SysUserRoleServices sysUserRoleServices;
@Autowired
private SysUserRoleMapper sysUserRoleMapper;
//获取用户的角色 @Override public Map<String, Object> getUserRole(Integer id) { //获取所有角色 List<SysRole> sysRoleList = baseMapper.selectList(null); //用户的角色列表 List<SysUserRole> sysUserRolesList = mapper/service.selectList(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, id)); //获取用户角色id的集合 List<Long> roleIdList = sysUserRolesList.stream().map(obj -> obj.getRoleId()).collect(Collectors.toList()); //获取用户分配的角色信息 List<SysRole> assignList = new ArrayList<>(); for (SysRole sysRole : sysRoleList) { if(roleIdList.contains(sysRole.getId())) assignList.add(sysRole); } Map<String ,Object> map = new HashMap<>(); //用户分配到的角色 map.put("assignList",assignList); //全部的角色 map.put("sysRoleList",sysRoleList); return map; }
@Transactional
@Override
public void doAssign(AssginRoleVo assginRoleVo) {
//1删除之前用户角色
sysUserRoleMapper.delete(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, assginRoleVo.getUserId()));
for(Long roleId : assginRoleVo.getRoleIdList()) {
如果空跳出循环
if(StringUtils.isEmpty(roleId)) continue;
SysUserRole userRole = new SysUserRole();
userRole.setUserId(assginRoleVo.getUserId());
userRole.setRoleId(roleId);
sysUserRoleMapper.insert(userRole); --save
}
}
@Transactional
@Override
public void updateStatus(Long id, Integer status) {
SysUser sysUser = this.getById(id);
if(status.intValue() == 1) {
sysUser.setStatus(status);
} else {
sysUser.setStatus(0);
}
this.updateById(sysUser);
}
}
菜单
@Service public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> implements SysMenuService { @Autowired SysRoleMenuService sysRoleMenuService; @Override public List<SysMenu> findNodes() { List<SysMenu> menuList = baseMapper.selectList(null); List<SysMenu> sysMenus = MenuHelper.buildTree(menuList); return sysMenus; }
}
package com.atguigu.auth.utils;
import com.atguigu.model.system.SysMenu;
import java.util.ArrayList;
import java.util.List;
/**
* <p>
* 根据菜单数据构建菜单数据
* </p>
*
*/
public class MenuHelper {
/**
* 使用递归方法建菜单-
* @param sysMenuList
* @return
*/
public static List<SysMenu> buildTree(List<SysMenu> sysMenuList) {
//
List<SysMenu> trees = new ArrayList<>();
for (SysMenu sysMenu : sysMenuList) {
if (sysMenu.getParentId().longValue() == 0) {
trees.add(findChildren(sysMenu,sysMenuList));
}
}
return trees;
}
/**
* 递归查找子节点
* @param treeNodes
* @return
*/
public static SysMenu findChildren(SysMenu sysMenu, List<SysMenu> treeNodes) {
sysMenu.setChildren(new ArrayList<SysMenu>());
for (SysMenu it : treeNodes) {
if(sysMenu.getId().longValue() == it.getParentId().longValue()) {
if (sysMenu.getChildren() == null) {
sysMenu.setChildren(new ArrayList<>());
}
sysMenu.getChildren().add(findChildren(it,treeNodes));
}
}
return sysMenu;
}
}
@Override public boolean removeMenuById(Integer id) throws GlobalException.myException { if(baseMapper.selectCount(new LambdaQueryWrapper<SysMenu>().eq(SysMenu::getParentId, id))!=0){ throw new GlobalException.myException(201,"菜单不能删除"); } if(baseMapper.deleteById(id)!=0) return true; return false; }
菜单
@Override public List<SysMenu> findSysMenuByRoleID(Integer roleID) { //所有菜单 List<SysMenu> sysMenus = baseMapper.selectList(new LambdaQueryWrapper<SysMenu>().eq(SysMenu::getStatus,1)); //获取角色对应的菜单id List<SysRoleMenu> list = sysRoleMenuService.list(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getRoleId, roleID)); List<Long> menuIdList = list.stream().map(obj -> obj.getMenuId()).collect(Collectors.toList()); sysMenus.stream().forEach(obj -> { if(menuIdList.contains(obj.getId())) obj.setSelect(true); else obj.setSelect(false); }); //返回树形结构的菜单 List<SysMenu> menus = MenuHelper.buildTree(sysMenus); return menus; }
@Transactional @Override public void doAssign(AssginMenuVo assginMenuVo) { sysRoleMenuMapper.delete(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getRoleId, assginMenuVo.getRoleId())); for (Long menuId : assginMenuVo.getMenuIdList()) { if (StringUtils.isEmpty(menuId)) continue; SysRoleMenu rolePermission = new SysRoleMenu(); rolePermission.setRoleId(assginMenuVo.getRoleId()); rolePermission.setMenuId(menuId); sysRoleMenuMapper.insert(rolePermission); } }