feat: 新增根据权限获取用户列表功能

1. 在SysUserController中新增/list-by-permission接口
2. 实现根据权限标识获取用户列表的业务逻辑
3. 支持按租户筛选用户
4. 更新用户认证登录API文档
5. 优化前端用户相关接口
This commit is contained in:
zlwu committed 2025-07-09 21:18:21 +08:00
1 parent 38166f105c
commit cd87b47cf9
7 files changed
+359 -181

No files matched your search

@@ -23,6 +23,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.common.web.core.BaseController;
import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.bo.SysDeptBo;
import org.dromara.system.domain.bo.SysPostBo;
import org.dromara.system.domain.bo.SysRoleBo;
@@ -85,7 +86,8 @@ public class SysUserController extends BaseController {
@SaCheckPermission("system:user:import")
@PostMapping(value = "/importData", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<Void> importData(@RequestPart("file") MultipartFile file, boolean updateSupport) throws Exception {
ExcelResult<SysUserImportVo> result = ExcelUtil.importExcel(file.getInputStream(), SysUserImportVo.class, new SysUserImportListener(updateSupport));
ExcelResult<SysUserImportVo> result = ExcelUtil.importExcel(file.getInputStream(), SysUserImportVo.class,
new SysUserImportListener(updateSupport));
return R.ok(result.getAnalysis());
}
@@ -126,7 +128,7 @@ public class SysUserController extends BaseController {
* @param userId 用户ID
*/
@SaCheckPermission("system:user:query")
@GetMapping(value = {"/", "/{userId}"})
@GetMapping(value = { "/", "/{userId}" })
public R<SysUserInfoVo> getInfo(@PathVariable(value = "userId", required = false) Long userId) {
SysUserInfoVo userInfoVo = new SysUserInfoVo();
if (ObjectUtil.isNotNull(userId)) {
@@ -145,7 +147,8 @@ public class SysUserController extends BaseController {
SysRoleBo roleBo = new SysRoleBo();
roleBo.setStatus(SystemConstants.NORMAL);
List<SysRoleVo> roles = roleService.selectRoleList(roleBo);
userInfoVo.setRoles(LoginHelper.isSuperAdmin(userId) ? roles : StreamUtils.filter(roles, r -> !r.isSuperAdmin()));
userInfoVo
.setRoles(LoginHelper.isSuperAdmin(userId) ? roles : StreamUtils.filter(roles, r -> !r.isSuperAdmin()));
return R.ok(userInfoVo);
}
@@ -217,7 +220,7 @@ public class SysUserController extends BaseController {
@SaCheckPermission("system:user:query")
@GetMapping("/optionselect")
public R<List<SysUserVo>> optionselect(@RequestParam(required = false) Long[] userIds,
@RequestParam(required = false) Long deptId) {
@RequestParam(required = false) Long deptId) {
return R.ok(userService.selectUserByIds(ArrayUtil.isEmpty(userIds) ? null : List.of(userIds), deptId));
}
@@ -260,7 +263,8 @@ public class SysUserController extends BaseController {
List<SysRoleVo> roles = roleService.selectRolesAuthByUserId(userId);
SysUserInfoVo userInfoVo = new SysUserInfoVo();
userInfoVo.setUser(user);
userInfoVo.setRoles(LoginHelper.isSuperAdmin(userId) ? roles : StreamUtils.filter(roles, r -> !r.isSuperAdmin()));
userInfoVo
.setRoles(LoginHelper.isSuperAdmin(userId) ? roles : StreamUtils.filter(roles, r -> !r.isSuperAdmin()));
return R.ok(userInfoVo);
}
@@ -297,4 +301,14 @@ public class SysUserController extends BaseController {
return R.ok(userService.selectUserListByDept(deptId));
}
/**
* 根据权限标识获取用户列表
*/
@SaCheckPermission("system:user:list")
@GetMapping("/list-by-permission")
public R<List<SysUser>> listUsersByPermission(
@RequestParam("permission") String permission,
@RequestParam(value = "tenantId", required = false) String tenantId) {
return R.ok(userService.selectUserListByPermission(permission, tenantId));
}
}
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.dromara.common.mybatis.annotation.DataColumn;
import org.dromara.common.mybatis.annotation.DataPermission;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
@@ -20,104 +21,138 @@ import java.util.List;
*/
public interface SysUserMapper extends BaseMapperPlus<SysUser, SysUserVo> {
/**
* 分页查询用户列表,并进行数据权限控制
*
* @param page 分页参数
* @param queryWrapper 查询条件
* @return 分页的用户信息
*/
@DataPermission({
@DataColumn(key = "deptName", value = "u.dept_id"),
@DataColumn(key = "userName", value = "u.user_id")
})
Page<SysUserVo> selectPageUserList(@Param("page") Page<SysUser> page, @Param(Constants.WRAPPER) Wrapper<SysUser> queryWrapper);
/**
* 分页查询用户列表,并进行数据权限控制
*
* @param page 分页参数
* @param queryWrapper 查询条件
* @return 分页的用户信息
*/
@DataPermission({
@DataColumn(key = "deptName", value = "u.dept_id"),
@DataColumn(key = "userName", value = "u.user_id")
})
Page<SysUserVo> selectPageUserList(@Param("page") Page<SysUser> page,
@Param(Constants.WRAPPER) Wrapper<SysUser> queryWrapper);
/**
* 查询用户列表,并进行数据权限控制
*
* @param queryWrapper 查询条件
* @return 用户信息集合
*/
@DataPermission({
@DataColumn(key = "deptName", value = "dept_id"),
@DataColumn(key = "userName", value = "user_id")
})
List<SysUserVo> selectUserList(@Param(Constants.WRAPPER) Wrapper<SysUser> queryWrapper);
/**
* 查询用户列表,并进行数据权限控制
*
* @param queryWrapper 查询条件
* @return 用户信息集合
*/
@DataPermission({
@DataColumn(key = "deptName", value = "dept_id"),
@DataColumn(key = "userName", value = "user_id")
})
List<SysUserVo> selectUserList(@Param(Constants.WRAPPER) Wrapper<SysUser> queryWrapper);
/**
* 根据条件分页查询用户列表
*
* @param queryWrapper 查询条件
* @return 用户信息集合信息
*/
@DataPermission({
@DataColumn(key = "deptName", value = "d.dept_id"),
@DataColumn(key = "userName", value = "u.user_id")
})
List<SysUserExportVo> selectUserExportList(@Param(Constants.WRAPPER) Wrapper<SysUser> queryWrapper);
/**
* 根据条件分页查询用户列表
*
* @param queryWrapper 查询条件
* @return 用户信息集合信息
*/
@DataPermission({
@DataColumn(key = "deptName", value = "d.dept_id"),
@DataColumn(key = "userName", value = "u.user_id")
})
List<SysUserExportVo> selectUserExportList(@Param(Constants.WRAPPER) Wrapper<SysUser> queryWrapper);
/**
* 根据条件分页查询已配用户角色列表
*
* @param queryWrapper 查询条件
* @return 用户信息集合信息
*/
@DataPermission({
@DataColumn(key = "deptName", value = "d.dept_id"),
@DataColumn(key = "userName", value = "u.user_id")
})
Page<SysUserVo> selectAllocatedList(@Param("page") Page<SysUser> page, @Param(Constants.WRAPPER) Wrapper<SysUser> queryWrapper);
/**
* 根据条件分页查询已配用户角色列表
*
* @param queryWrapper 查询条件
* @return 用户信息集合信息
*/
@DataPermission({
@DataColumn(key = "deptName", value = "d.dept_id"),
@DataColumn(key = "userName", value = "u.user_id")
})
Page<SysUserVo> selectAllocatedList(@Param("page") Page<SysUser> page,
@Param(Constants.WRAPPER) Wrapper<SysUser> queryWrapper);
/**
* 根据条件分页查询未分配用户角色列表
*
* @param queryWrapper 查询条件
* @return 用户信息集合信息
*/
@DataPermission({
@DataColumn(key = "deptName", value = "d.dept_id"),
@DataColumn(key = "userName", value = "u.user_id")
})
Page<SysUserVo> selectUnallocatedList(@Param("page") Page<SysUser> page, @Param(Constants.WRAPPER) Wrapper<SysUser> queryWrapper);
/**
* 根据条件分页查询未分配用户角色列表
*
* @param queryWrapper 查询条件
* @return 用户信息集合信息
*/
@DataPermission({
@DataColumn(key = "deptName", value = "d.dept_id"),
@DataColumn(key = "userName", value = "u.user_id")
})
Page<SysUserVo> selectUnallocatedList(@Param("page") Page<SysUser> page,
@Param(Constants.WRAPPER) Wrapper<SysUser> queryWrapper);
/**
* 根据用户ID统计用户数量
*
* @param userId 用户ID
* @return 用户数量
*/
@DataPermission({
@DataColumn(key = "deptName", value = "dept_id"),
@DataColumn(key = "userName", value = "user_id")
})
long countUserById(Long userId);
/**
* 根据用户ID统计用户数量
*
* @param userId 用户ID
* @return 用户数量
*/
@DataPermission({
@DataColumn(key = "deptName", value = "dept_id"),
@DataColumn(key = "userName", value = "user_id")
})
long countUserById(Long userId);
/**
* 根据条件更新用户数据
*
* @param user 要更新的用户实体
* @param updateWrapper 更新条件封装器
* @return 更新操作影响的行数
*/
@Override
@DataPermission({
@DataColumn(key = "deptName", value = "dept_id"),
@DataColumn(key = "userName", value = "user_id")
})
int update(@Param(Constants.ENTITY) SysUser user, @Param(Constants.WRAPPER) Wrapper<SysUser> updateWrapper);
/**
* 根据权限标识获取用户列表
*
* @param permission 权限标识
* @param tenantId 租户ID
* @return 用户列表
*/
@Select("""
SELECT DISTINCT
su.*
FROM
sys_user su
INNER JOIN sys_user_role sur ON su.user_id = sur.user_id
INNER JOIN sys_role sr ON sur.role_id = sr.role_id
INNER JOIN sys_role_menu srm ON sr.role_id = srm.role_id
INNER JOIN sys_menu sm ON srm.menu_id = sm.menu_id
WHERE
su.del_flag = '0'
AND su.status = '0'
AND sr.del_flag = '0'
AND sr.status = '0'
AND sm.perms = #{permission}
<if test="tenantId != null and tenantId != ''">
AND su.tenant_id = #{tenantId}
</if>
ORDER BY
su.user_id
""")
List<SysUser> selectUserListByPermission(@Param("permission") String permission,
@Param("tenantId") String tenantId);
/**
* 根据用户ID更新用户数据
*
* @param user 要更新的用户实体
* @return 更新操作影响的行数
*/
@Override
@DataPermission({
@DataColumn(key = "deptName", value = "dept_id"),
@DataColumn(key = "userName", value = "user_id")
})
int updateById(@Param(Constants.ENTITY) SysUser user);
/**
* 根据条件更新用户数据
*
* @param user 要更新的用户实体
* @param updateWrapper 更新条件封装器
* @return 更新操作影响的行数
*/
@Override
@DataPermission({
@DataColumn(key = "deptName", value = "dept_id"),
@DataColumn(key = "userName", value = "user_id")
})
int update(@Param(Constants.ENTITY) SysUser user, @Param(Constants.WRAPPER) Wrapper<SysUser> updateWrapper);
/**
* 根据用户ID更新用户数据
*
* @param user 要更新的用户实体
* @return 更新操作影响的行数
*/
@Override
@DataPermission({
@DataColumn(key = "deptName", value = "dept_id"),
@DataColumn(key = "userName", value = "user_id")
})
int updateById(@Param(Constants.ENTITY) SysUser user);
}
@@ -5,6 +5,7 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.domain.vo.SysUserExportVo;
import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.domain.SysUser;
import java.util.List;
@@ -15,7 +16,6 @@ import java.util.List;
*/
public interface ISysUserService {
/**
* 根据条件分页查询用户列表
*
@@ -228,4 +228,13 @@ public interface ISysUserService {
* @return 结果
*/
List<SysUserVo> selectUserListByDept(Long deptId);
/**
* 根据权限标识获取用户列表
*
* @param permission 权限标识
* @param tenantId 租户ID
* @return 用户列表
*/
List<SysUser> selectUserListByPermission(String permission, String tenantId);
}
@@ -76,20 +76,21 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
Map<String, Object> params = user.getParams();
QueryWrapper<SysUser> wrapper = Wrappers.query();
wrapper.eq("u.del_flag", SystemConstants.NORMAL)
.eq(ObjectUtil.isNotNull(user.getUserId()), "u.user_id", user.getUserId())
.in(StringUtils.isNotBlank(user.getUserIds()), "u.user_id", StringUtils.splitTo(user.getUserIds(), Convert::toLong))
.like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
.like(StringUtils.isNotBlank(user.getNickName()), "u.nick_name", user.getNickName())
.eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
.like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
.between(params.get("beginTime") != null && params.get("endTime") != null,
"u.create_time", params.get("beginTime"), params.get("endTime"))
.and(ObjectUtil.isNotNull(user.getDeptId()), w -> {
List<SysDept> deptList = deptMapper.selectListByParentId(user.getDeptId());
List<Long> ids = StreamUtils.toList(deptList, SysDept::getDeptId);
ids.add(user.getDeptId());
w.in("u.dept_id", ids);
}).orderByAsc("u.user_id");
.eq(ObjectUtil.isNotNull(user.getUserId()), "u.user_id", user.getUserId())
.in(StringUtils.isNotBlank(user.getUserIds()), "u.user_id",
StringUtils.splitTo(user.getUserIds(), Convert::toLong))
.like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
.like(StringUtils.isNotBlank(user.getNickName()), "u.nick_name", user.getNickName())
.eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
.like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
.between(params.get("beginTime") != null && params.get("endTime") != null,
"u.create_time", params.get("beginTime"), params.get("endTime"))
.and(ObjectUtil.isNotNull(user.getDeptId()), w -> {
List<SysDept> deptList = deptMapper.selectListByParentId(user.getDeptId());
List<Long> ids = StreamUtils.toList(deptList, SysDept::getDeptId);
ids.add(user.getDeptId());
w.in("u.dept_id", ids);
}).orderByAsc("u.user_id");
if (StringUtils.isNotBlank(user.getExcludeUserIds())) {
wrapper.notIn("u.user_id", StringUtils.splitTo(user.getExcludeUserIds(), Convert::toLong));
}
@@ -106,11 +107,11 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
public TableDataInfo<SysUserVo> selectAllocatedList(SysUserBo user, PageQuery pageQuery) {
QueryWrapper<SysUser> wrapper = Wrappers.query();
wrapper.eq("u.del_flag", SystemConstants.NORMAL)
.eq(ObjectUtil.isNotNull(user.getRoleId()), "r.role_id", user.getRoleId())
.like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
.eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
.like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
.orderByAsc("u.user_id");
.eq(ObjectUtil.isNotNull(user.getRoleId()), "r.role_id", user.getRoleId())
.like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
.eq(StringUtils.isNotBlank(user.getStatus()), "u.status", user.getStatus())
.like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
.orderByAsc("u.user_id");
Page<SysUserVo> page = baseMapper.selectAllocatedList(pageQuery.build(), wrapper);
return TableDataInfo.build(page);
}
@@ -126,11 +127,11 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
List<Long> userIds = userRoleMapper.selectUserIdsByRoleId(user.getRoleId());
QueryWrapper<SysUser> wrapper = Wrappers.query();
wrapper.eq("u.del_flag", SystemConstants.NORMAL)
.and(w -> w.ne("r.role_id", user.getRoleId()).or().isNull("r.role_id"))
.notIn(CollUtil.isNotEmpty(userIds), "u.user_id", userIds)
.like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
.like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
.orderByAsc("u.user_id");
.and(w -> w.ne("r.role_id", user.getRoleId()).or().isNull("r.role_id"))
.notIn(CollUtil.isNotEmpty(userIds), "u.user_id", userIds)
.like(StringUtils.isNotBlank(user.getUserName()), "u.user_name", user.getUserName())
.like(StringUtils.isNotBlank(user.getPhonenumber()), "u.phonenumber", user.getPhonenumber())
.orderByAsc("u.user_id");
Page<SysUserVo> page = baseMapper.selectUnallocatedList(pageQuery.build(), wrapper);
return TableDataInfo.build(page);
}
@@ -183,10 +184,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override
public List<SysUserVo> selectUserByIds(List<Long> userIds, Long deptId) {
return baseMapper.selectUserList(new LambdaQueryWrapper<SysUser>()
.select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName)
.eq(SysUser::getStatus, SystemConstants.NORMAL)
.eq(ObjectUtil.isNotNull(deptId), SysUser::getDeptId, deptId)
.in(CollUtil.isNotEmpty(userIds), SysUser::getUserId, userIds));
.select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName)
.eq(SysUser::getStatus, SystemConstants.NORMAL)
.eq(ObjectUtil.isNotNull(deptId), SysUser::getDeptId, deptId)
.in(CollUtil.isNotEmpty(userIds), SysUser::getUserId, userIds));
}
/**
@@ -228,8 +229,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override
public boolean checkUserNameUnique(SysUserBo user) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysUser>()
.eq(SysUser::getUserName, user.getUserName())
.ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId()));
.eq(SysUser::getUserName, user.getUserName())
.ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId()));
return !exist;
}
@@ -241,8 +242,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override
public boolean checkPhoneUnique(SysUserBo user) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysUser>()
.eq(SysUser::getPhonenumber, user.getPhonenumber())
.ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId()));
.eq(SysUser::getPhonenumber, user.getPhonenumber())
.ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId()));
return !exist;
}
@@ -254,8 +255,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override
public boolean checkEmailUnique(SysUserBo user) {
boolean exist = baseMapper.exists(new LambdaQueryWrapper<SysUser>()
.eq(SysUser::getEmail, user.getEmail())
.ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId()));
.eq(SysUser::getEmail, user.getEmail())
.ne(ObjectUtil.isNotNull(user.getUserId()), SysUser::getUserId, user.getUserId()));
return !exist;
}
@@ -369,9 +370,9 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override
public int updateUserStatus(Long userId, String status) {
return baseMapper.update(null,
new LambdaUpdateWrapper<SysUser>()
.set(SysUser::getStatus, status)
.eq(SysUser::getUserId, userId));
new LambdaUpdateWrapper<SysUser>()
.set(SysUser::getStatus, status)
.eq(SysUser::getUserId, userId));
}
/**
@@ -384,12 +385,12 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override
public int updateUserProfile(SysUserBo user) {
return baseMapper.update(null,
new LambdaUpdateWrapper<SysUser>()
.set(ObjectUtil.isNotNull(user.getNickName()), SysUser::getNickName, user.getNickName())
.set(SysUser::getPhonenumber, user.getPhonenumber())
.set(SysUser::getEmail, user.getEmail())
.set(SysUser::getSex, user.getSex())
.eq(SysUser::getUserId, user.getUserId()));
new LambdaUpdateWrapper<SysUser>()
.set(ObjectUtil.isNotNull(user.getNickName()), SysUser::getNickName, user.getNickName())
.set(SysUser::getPhonenumber, user.getPhonenumber())
.set(SysUser::getEmail, user.getEmail())
.set(SysUser::getSex, user.getSex())
.eq(SysUser::getUserId, user.getUserId()));
}
/**
@@ -402,9 +403,9 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override
public boolean updateUserAvatar(Long userId, Long avatar) {
return baseMapper.update(null,
new LambdaUpdateWrapper<SysUser>()
.set(SysUser::getAvatar, avatar)
.eq(SysUser::getUserId, userId)) > 0;
new LambdaUpdateWrapper<SysUser>()
.set(SysUser::getAvatar, avatar)
.eq(SysUser::getUserId, userId)) > 0;
}
/**
@@ -417,9 +418,9 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override
public int resetUserPwd(Long userId, String password) {
return baseMapper.update(null,
new LambdaUpdateWrapper<SysUser>()
.set(SysUser::getPassword, password)
.eq(SysUser::getUserId, userId));
new LambdaUpdateWrapper<SysUser>()
.set(SysUser::getPassword, password)
.eq(SysUser::getUserId, userId));
}
/**
@@ -443,7 +444,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
if (ArrayUtil.isNotEmpty(posts)) {
if (clear) {
// 删除用户与岗位关联
userPostMapper.delete(new LambdaQueryWrapper<SysUserPost>().eq(SysUserPost::getUserId, user.getUserId()));
userPostMapper
.delete(new LambdaQueryWrapper<SysUserPost>().eq(SysUserPost::getUserId, user.getUserId()));
}
// 新增用户与岗位管理
List<SysUserPost> list = StreamUtils.toList(List.of(posts), postId -> {
@@ -471,7 +473,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
}
// 判断是否具有此角色的操作权限
List<SysRoleVo> roles = roleMapper.selectRoleList(
new QueryWrapper<SysRole>().in("r.role_id", roleList));
new QueryWrapper<SysRole>().in("r.role_id", roleList));
if (CollUtil.isEmpty(roles)) {
throw new ServiceException("没有权限访问角色的数据");
}
@@ -561,7 +563,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override
public String selectUserNameById(Long userId) {
SysUser sysUser = baseMapper.selectOne(new LambdaQueryWrapper<SysUser>()
.select(SysUser::getUserName).eq(SysUser::getUserId, userId));
.select(SysUser::getUserName).eq(SysUser::getUserId, userId));
return ObjectUtils.notNullGetter(sysUser, SysUser::getUserName);
}
@@ -575,7 +577,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Cacheable(cacheNames = CacheNames.SYS_NICKNAME, key = "#userId")
public String selectNicknameById(Long userId) {
SysUser sysUser = baseMapper.selectOne(new LambdaQueryWrapper<SysUser>()
.select(SysUser::getNickName).eq(SysUser::getUserId, userId));
.select(SysUser::getNickName).eq(SysUser::getUserId, userId));
return ObjectUtils.notNullGetter(sysUser, SysUser::getNickName);
}
@@ -606,7 +608,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override
public String selectPhonenumberById(Long userId) {
SysUser sysUser = baseMapper.selectOne(new LambdaQueryWrapper<SysUser>()
.select(SysUser::getPhonenumber).eq(SysUser::getUserId, userId));
.select(SysUser::getPhonenumber).eq(SysUser::getUserId, userId));
return ObjectUtils.notNullGetter(sysUser, SysUser::getPhonenumber);
}
@@ -619,7 +621,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
@Override
public String selectEmailById(Long userId) {
SysUser sysUser = baseMapper.selectOne(new LambdaQueryWrapper<SysUser>()
.select(SysUser::getEmail).eq(SysUser::getUserId, userId));
.select(SysUser::getEmail).eq(SysUser::getUserId, userId));
return ObjectUtils.notNullGetter(sysUser, SysUser::getEmail);
}
@@ -635,9 +637,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
return List.of();
}
List<SysUserVo> list = baseMapper.selectVoList(new LambdaQueryWrapper<SysUser>()
.select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName, SysUser::getEmail, SysUser::getPhonenumber)
.eq(SysUser::getStatus, SystemConstants.NORMAL)
.in(SysUser::getUserId, userIds));
.select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName, SysUser::getEmail,
SysUser::getPhonenumber)
.eq(SysUser::getStatus, SystemConstants.NORMAL)
.in(SysUser::getUserId, userIds));
return BeanUtil.copyToList(list, UserDTO.class);
}
@@ -653,7 +656,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
return List.of();
}
List<SysUserRole> userRoles = userRoleMapper.selectList(
new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getRoleId, roleIds));
new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getRoleId, roleIds));
return StreamUtils.toList(userRoles, SysUserRole::getUserId);
}
@@ -671,7 +674,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
// 通过角色ID获取用户角色信息
List<SysUserRole> userRoles = userRoleMapper.selectList(
new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getRoleId, roleIds));
new LambdaQueryWrapper<SysUserRole>().in(SysUserRole::getRoleId, roleIds));
// 获取用户ID列表
Set<Long> userIds = StreamUtils.toSet(userRoles, SysUserRole::getUserId);
@@ -691,9 +694,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
return List.of();
}
List<SysUserVo> list = baseMapper.selectVoList(new LambdaQueryWrapper<SysUser>()
.select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName, SysUser::getEmail, SysUser::getPhonenumber)
.eq(SysUser::getStatus, SystemConstants.NORMAL)
.in(SysUser::getDeptId, deptIds));
.select(SysUser::getUserId, SysUser::getUserName, SysUser::getNickName, SysUser::getEmail,
SysUser::getPhonenumber)
.eq(SysUser::getStatus, SystemConstants.NORMAL)
.in(SysUser::getDeptId, deptIds));
return BeanUtil.copyToList(list, UserDTO.class);
}
@@ -711,7 +715,7 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
// 通过岗位ID获取用户岗位信息
List<SysUserPost> userPosts = userPostMapper.selectList(
new LambdaQueryWrapper<SysUserPost>().in(SysUserPost::getPostId, postIds));
new LambdaQueryWrapper<SysUserPost>().in(SysUserPost::getPostId, postIds));
// 获取用户ID列表
Set<Long> userIds = StreamUtils.toSet(userPosts, SysUserPost::getUserId);
@@ -732,10 +736,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
}
return baseMapper.selectList(
new LambdaQueryWrapper<SysUser>()
.select(SysUser::getUserId, SysUser::getNickName)
.in(SysUser::getUserId, userIds)
).stream()
.collect(Collectors.toMap(SysUser::getUserId, SysUser::getNickName));
.select(SysUser::getUserId, SysUser::getNickName)
.in(SysUser::getUserId, userIds))
.stream()
.collect(Collectors.toMap(SysUser::getUserId, SysUser::getNickName));
}
/**
@@ -751,10 +755,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
}
return roleMapper.selectList(
new LambdaQueryWrapper<SysRole>()
.select(SysRole::getRoleId, SysRole::getRoleName)
.in(SysRole::getRoleId, roleIds)
).stream()
.collect(Collectors.toMap(SysRole::getRoleId, SysRole::getRoleName));
.select(SysRole::getRoleId, SysRole::getRoleName)
.in(SysRole::getRoleId, roleIds))
.stream()
.collect(Collectors.toMap(SysRole::getRoleId, SysRole::getRoleName));
}
/**
@@ -770,10 +774,10 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
}
return deptMapper.selectList(
new LambdaQueryWrapper<SysDept>()
.select(SysDept::getDeptId, SysDept::getDeptName)
.in(SysDept::getDeptId, deptIds)
).stream()
.collect(Collectors.toMap(SysDept::getDeptId, SysDept::getDeptName));
.select(SysDept::getDeptId, SysDept::getDeptName)
.in(SysDept::getDeptId, deptIds))
.stream()
.collect(Collectors.toMap(SysDept::getDeptId, SysDept::getDeptName));
}
/**
@@ -789,10 +793,22 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
}
return postMapper.selectList(
new LambdaQueryWrapper<SysPost>()
.select(SysPost::getPostId, SysPost::getPostName)
.in(SysPost::getPostId, postIds)
).stream()
.collect(Collectors.toMap(SysPost::getPostId, SysPost::getPostName));
.select(SysPost::getPostId, SysPost::getPostName)
.in(SysPost::getPostId, postIds))
.stream()
.collect(Collectors.toMap(SysPost::getPostId, SysPost::getPostName));
}
/**
* 根据权限标识获取用户列表
*
* @param permission 权限标识
* @param tenantId 租户ID
* @return 用户列表
*/
@Override
public List<SysUser> selectUserListByPermission(String permission, String tenantId) {
return baseMapper.selectUserListByPermission(permission, tenantId);
}
}
+91 -1
View File
@@ -1,4 +1,9 @@
# 用户认证登录 API
# 用户认证登录API文档
## 目录
1. [用户登录](#用户登录)
2. [获取用户信息](#获取用户信息)
3. [获取具有指定权限的用户列表](#获取具有指定权限的用户列表)
## 📋 文档说明
@@ -660,3 +665,88 @@ methods: {
**📝 维护**: 用户认证登录 API 文档
**🔄 更新**: 2025-01-03
**📁 文件**: 用户认证登录 API.md
## 获取具有指定权限的用户列表
### 基本信息
- **接口URL**: `/system/user/list-by-permission`
- **请求方式**: GET
- **接口描述**: 获取具有指定权限的用户列表
- **权限标识**: `system:user:list`
### 请求参数
#### Query参数
| 参数名 | 类型 | 是否必须 | 说明 | 示例值 |
|--------|------|----------|------|--------|
| permission | string | 是 | 权限标识符 | hq:hallAudit:list |
### 响应参数
```typescript
{
code: number; // 状态码
msg: string; // 提示信息
rows: {
userId: string; // 用户ID
userName: string; // 用户名
nickName: string; // 昵称
dept: {
deptId: string; // 部门ID
deptName: string; // 部门名称
};
avatar: string; // 头像URL
}[];
total: number; // 总记录数
}
```
### 响应示例
```json
{
"code": 200,
"msg": "操作成功",
"rows": [
{
"userId": "1",
"userName": "admin",
"nickName": "管理员",
"dept": {
"deptId": "1",
"deptName": "后勤部"
},
"avatar": "http://example.com/avatar.jpg"
}
],
"total": 1
}
```
### 错误码
| 错误码 | 说明 |
|--------|------|
| 401 | 未登录或登录超时 |
| 403 | 没有权限 |
| 500 | 服务器内部错误 |
### 注意事项
1. 该接口需要用户登录后才能访问
2. 返回的用户信息已过滤敏感字段
3. 建议前端对结果进行缓存,避免频繁请求
4. 返回结果按照用户ID升序排序
### 使用示例
```typescript
// 前端调用示例
import { listUsersByPermission } from '@/api/system/user';
async function getAuditors() {
try {
const res = await listUsersByPermission('hq:hallAudit:list');
if (res.code === 200) {
return res.rows;
}
} catch (error) {
console.error('获取审核人员列表失败:', error);
return [];
}
}
```
+15 -1
View File
@@ -209,6 +209,19 @@ export const deptTreeSelect = (): AxiosPromise<DeptTreeVO[]> => {
});
};
/** 获取具有指定权限的用户列表 */
export function listUsersByPermission(permission: string, tenantId?: string): AxiosPromise<UserVO[]> {
return request({
url: '/system/user/list-by-permission',
method: 'get',
params: {
permission,
tenantId
}
});
}
export default {
listUser,
getUser,
@@ -225,5 +238,6 @@ export default {
getAuthRole,
updateAuthRole,
deptTreeSelect,
listUserByDeptId
listUserByDeptId,
listUsersByPermission
};
+1 -1
View File
@@ -40,7 +40,7 @@
</el-row>
</template>
<el-table v-loading="loading" border :data="hallInfoList" @selection-change="handleSelectionChange">
<el-table v-loading="loading" border :data="hallInfoList" @selection-change="handleSelectionChange" @row-dblclick="handleView">
<el-table-column type="selection" width="55" align="center" />
<!-- <el-table-column label="主键ID" align="center" prop="id" v-if="true" /> -->
<el-table-column label="报告厅名称" align="center" prop="hallName" />