目录
1)后端:SQL版
获得登录用户
通过登录用户获得角色们
通过角色们查询所有的权限
分析
# 1. 查询用户的角色 SELECT role_id FROM sys_user_role WHERE user_id = 'u001' # 结果角色id:[1,2] # 2. 查询指定角色们的权限id DISTINCT 去重 SELECT DISTINCT perm_id FROM sys_role_permission WHERE role_id IN (1,2) # 结果权限id:[1,2,3,4,5] # 3. 查询指定权限id的权限详情 SELECT * FROM sys_permission WHERE id IN (1,2,3,4,5) # 使用子查询将3条语句整合 SELECT * FROM sys_permission WHERE id IN (SELECT DISTINCT perm_id FROM sys_role_permission WHERE role_id IN (SELECT role_id FROM sys_user_role WHERE user_id = 'u001'))
编写mapper

@Select("SELECT * FROM sys_permission WHERE id IN (SELECT DISTINCT perm_id FROM sys_role_permission WHERE role_id IN (SELECT role_id FROM sys_user_role WHERE user_id = #{uid}))")
List findAllByUserId(@Param("uid") String uid);
编写service
接口

ListfindAllByLoginUser(TbUser loginUser);
实现
@Override public ListfindAllByLoginUser(TbUser loginUser) { //1 查询指定用户的所有权限 List permList = baseMapper.findAllByUserId(loginUser.getUid()); //2 处理权限--父子关系 List resultList = new ArrayList<>(); Map cache = new HashMap<>(); for (SysPermission sysPermission : permList) { SysPermission permParent = cache.get(sysPermission.getParentId()); if(permParent == null) { // 一级添加结果 resultList.add(sysPermission); } else { permParent.getChildren().add(sysPermission); } // 将自己存放,让孩子可以获得 cache.put(sysPermission.getId(), sysPermission); } return resultList; }
编写controller

@Resource
private HttpServletRequest request;
@Resource
private JwtProperties jwtProperties;
@GetMapping("/login")
public BaseResult findAllByLoginUser() {
try {
// 1 获得登录用户
String token = request.getHeader("Authorization");
TbUser loginUser = JwtUtils.getObjectFromToken(token, jwtProperties.getPublicKey(), TbUser.class);
// 2 获得所有的权限
List list = sysPermissionService.findAllByLoginUser(loginUser);
// 3 返回
return BaseResult.ok("查询成功", list);
} catch (Exception e) {
e.printStackTrace();
return BaseResult.error("获得菜单失败");
}
} 2)后端:对象版
service层使用通过mapper进行一系列的查询,不用写SQL语句
//1. 查询用户的角色 //2. 查询指定角色们的权限id DISTINCT 去重 //3. 查询指定权限id的权限详情
@Override public ListfindAllByLoginUser(TbUser loginUser) { // 1. 查询用户的角色 [1,2] QueryWrapper sysUserRoleQueryWrapper = new QueryWrapper<>(); sysUserRoleQueryWrapper.eq("user_id", loginUser.getUid()); List sysUserRoleList = sysUserRoleMapper.selectList(sysUserRoleQueryWrapper); List roleIdList = sysUserRoleList.stream().map(sysUserRole -> sysUserRole.getRoleId()).collect(Collectors.toList()); // 2. 查询指定角色们的权限id DISTINCT 去重 [1,2,3,4,5] QueryWrapper sysRolePermissionQueryWrapper = new QueryWrapper<>(); sysRolePermissionQueryWrapper.in("role_id", roleIdList); List sysRolePermissionList = sysRolePermissionMapper.selectList(sysRolePermissionQueryWrapper); List permIdList = sysRolePermissionList.stream().map(sysRolePermission -> sysRolePermission.getPermId()).collect(Collectors.toList()); // 3. 查询指定权限id的权限详情 QueryWrapper sysPermissionQueryWrapper = new QueryWrapper<>(); sysPermissionQueryWrapper.in("id", permIdList ); List permList = baseMapper.selectList(sysPermissionQueryWrapper); // 4 处理权限--父子关系 List resultList = new ArrayList<>(); Map cache = new HashMap<>(); for (SysPermission sysPermission : permList) { SysPermission permParent = cache.get(sysPermission.getParentId()); if(permParent == null) { // 一级添加结果 resultList.add(sysPermission); } else { permParent.getChildren().add(sysPermission); } // 将自己存放,让孩子可以获得 cache.put(sysPermission.getId(), sysPermission); } return resultList; }
3)前端

学生管理系统(SMS) 用户详情 修改密码 退出登录 首页 {{onePerm.permName}} {{twoPerm.permName}} 传智专修学院