『博客开发日记-后台』之获取用户下拉选项接口的实现

本文最后更新于 2026年5月22日 晚上

获取用户下拉选项接口的实现


获取用户下拉选项接口的需求

按排序字段降序排列

查询状态正常的用户

超级管理员可以看到全部 普通用户按数据权限限制

要根据不同角色的用户来调整他们能看到的信息


代码实现

在 AdminUserController 中添加接口

1
2
3
4
5
6
7
@GetMapping("/options")
@SystemLog(businessName = "用户下拉选项")
@ApiOperation(value = "用户下拉选项", notes = "获取用户下拉数据", response = UserOptionVo.class, responseContainer = "List")
public ResponseResult getUserOptions()
{
return adminUserService.getUserOptions();
}

创建 UserOptionVo

1
2
3
4
5
6
7
8
9
10
11
12
13
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(description = "用户下拉选项")
public class UserOptionVo {
@ApiModelProperty(value = "用户ID", example = "1")
@JSONField(name = "value")//转换成 value 再响应给前端
private Long id;

@ApiModelProperty(value = "用户名称", example = "云梦泽")
@JSONField(name = "label")//转换成 label 再响应给前端
private String username;
}

在 AdminUserServiceImpl 中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
    //获取用户下拉选项
@Override
public ResponseResult getUserOptions()
{
//构建查询条件
LambdaQueryWrapper<SysUser> queryWrapper = new LambdaQueryWrapper<>();

//当前登录用户
LoginUser loginUser = SecurityUtils.getLoginUser();
Long currentUserId = null;
if (loginUser != null) {
currentUserId = loginUser.getSysUser().getId();
}

//超级管理员可以看到全部 普通用户按数据权限限制
if (!Objects.equals(currentUserId, 1L)) {
List<SysRole> roles = sysRoleService.selectRolesByUserId(currentUserId);
Integer maxDataScope = roles.stream()
.map(SysRole::getDataScope)
.filter(Objects::nonNull)
.min(Integer::compareTo)
.orElse(4);

//全部数据
if (!Objects.equals(maxDataScope, 1))
{
if (Objects.equals(maxDataScope, 2)) {
//部门及子部门数据
List<Long> deptIds = sysDeptService.selectDeptAndChildrenIds(Long.valueOf(loginUser.getSysUser().getDeptId()));
queryWrapper.in(SysUser::getDeptId, deptIds.stream().map(String::valueOf).toList());
} else if (Objects.equals(maxDataScope, 3)) {
//本部门数据
queryWrapper.eq(SysUser::getDeptId, loginUser.getSysUser().getDeptId());
} else if (Objects.equals(maxDataScope, 4)) {
//本人数据
queryWrapper.eq(SysUser::getId, currentUserId);
} else if (Objects.equals(maxDataScope, 5)) {
//自定义部门数据
List<Long> deptIds = new ArrayList<>();
for (SysRole role : roles) {
if (Objects.equals(role.getDataScope(), 5)) {
LambdaQueryWrapper<com.mengze.domain.entity.SysRoleDept> deptWrapper = new LambdaQueryWrapper<>();
deptWrapper.eq(com.mengze.domain.entity.SysRoleDept::getRoleId, role.getId())
.select(com.mengze.domain.entity.SysRoleDept::getDeptId);
List<com.mengze.domain.entity.SysRoleDept> roleDeptList = sysRoleDeptService.list(deptWrapper);
deptIds.addAll(roleDeptList.stream().map(com.mengze.domain.entity.SysRoleDept::getDeptId).toList());
}
}
if (!deptIds.isEmpty()) {
queryWrapper.in(SysUser::getDeptId, deptIds.stream().map(String::valueOf).toList());
}
}
}
}

//获取用户id
//查询状态正常的用户,并按 id 倒序排序
queryWrapper.eq(SysUser::getStatus, SystemConstants.STATUS_NORMAL)
.orderByDesc(SysUser::getId);

List<SysUser> users = adminUserService.list(queryWrapper);

//封装成vo
List<UserOptionVo> userOptionVos = BeanCopyUtils.copyBeanList(users, UserOptionVo.class);

return ResponseResult.okResult(userOptionVos);
}



PS:该系列只做为作者学习开发项目做的笔记用

不一定符合读者来学习,仅供参考


预告

后续会记录博客的开发过程

每次学习会做一份笔记来进行发表

“一花一世界,一叶一菩提”


版权所有 © 2026 云梦泽
欢迎访问我的个人网站:https://hgt12.github.io/


『博客开发日记-后台』之获取用户下拉选项接口的实现
http://example.com/2026/05/22/『博客开发日记-后台』之获取用户下拉选项接口的实现/
作者
云梦泽
发布于
2026年5月22日
更新于
2026年5月22日
许可协议