| | |
| | | // 管理员拥有所有权限,跳过 |
| | | continue; |
| | | } |
| | | // 判断该用户是否拥有此角色 |
| | | boolean previouslyHadRole = loginUser.getUser().getRoles() != null |
| | | && loginUser.getUser().getRoles().stream().anyMatch(r -> roleId.equals(r.getRoleId())); |
| | | // 权限计算会同时读取当前角色关系,覆盖新增角色未进入旧 token 的情况。 |
| | | java.util.Set<String> permissions = permissionService.getMenuPermission(loginUser.getUser()); |
| | | boolean hasRole = loginUser.getUser().getRoles() != null |
| | | && loginUser.getUser().getRoles().stream().anyMatch(r -> roleId.equals(r.getRoleId())); |
| | | if (!hasRole) |
| | | if (!previouslyHadRole && !hasRole) |
| | | { |
| | | continue; |
| | | } |
| | | // 刷新权限缓存 |
| | | loginUser.setPermissions(permissionService.getMenuPermission(loginUser.getUser())); |
| | | loginUser.setPermissions(permissions); |
| | | refreshToken(loginUser); |
| | | log.info("角色[{}]权限变更,已刷新在线用户[{}]的权限缓存", roleId, loginUser.getUsername()); |
| | | } |