feat:查询用户信息

This commit is contained in:
xiang
2025-09-02 23:08:19 +08:00
parent 77312d15a4
commit 84486e0ba8
16 changed files with 178 additions and 8 deletions

View File

@@ -0,0 +1,45 @@
package com.xiang.xservice.auth.api.dto.resp;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PermissionDTO {
/**
* id
*/
private Long id;
/**
* 名称
*/
private String name;
/**
* 编码
*/
private String code;
/**
* 类型 1=菜单 2=按钮 3=接口
*/
private Integer type;
/**
* 父类id
*/
private Long parentId;
/**
* 路径接口
*/
private String apiPath;
/**
* 请求方法
*/
private String method;
}

View File

@@ -0,0 +1,18 @@
package com.xiang.xservice.auth.api.dto.resp;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserDTO {
private List<RoleDTO> roles;
private UserResp user;
private DeptDTO dept;
private List<PermissionDTO> permissionRoles;
}

View File

@@ -5,11 +5,13 @@ import com.xiang.xservice.auth.api.dto.req.LoginRequest;
import com.xiang.xservice.auth.api.dto.req.RegisterRequest; import com.xiang.xservice.auth.api.dto.req.RegisterRequest;
import com.xiang.xservice.auth.api.dto.resp.LoginResp; import com.xiang.xservice.auth.api.dto.resp.LoginResp;
import com.xiang.xservice.auth.api.dto.resp.RegisterResp; import com.xiang.xservice.auth.api.dto.resp.RegisterResp;
import com.xiang.xservice.auth.api.dto.resp.UserDTO;
import com.xiang.xservice.auth.service.service.XUserService; import com.xiang.xservice.auth.service.service.XUserService;
import com.xiang.xservice.basic.common.resp.Result; import com.xiang.xservice.basic.common.resp.Result;
import com.xiang.xservice.basic.exception.BusinessException; import com.xiang.xservice.basic.exception.BusinessException;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@@ -55,4 +57,10 @@ public class TokenController implements TokenApi {
} }
return Result.error("操作失败"); return Result.error("操作失败");
} }
@GetMapping("/private/auth/getInfo")
public Result<UserDTO> getUserInfo() {
// todo token的工具类直接获取token中的userId无需传参
return Result.success(userService.getUserDetail(1L));
}
} }

View File

@@ -12,7 +12,6 @@ import com.xiang.xservice.basic.common.resp.Result;
import com.xiang.xservice.basic.exception.BusinessException; import com.xiang.xservice.basic.exception.BusinessException;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;

View File

@@ -2,7 +2,7 @@ server:
port: 38011 port: 38011
spring: spring:
profiles: profiles:
active: test active: local
application: application:
name: xservice-auth-center name: xservice-auth-center
mvc: mvc:

View File

@@ -0,0 +1,17 @@
package com.xiang.xservice.auth.service.convert;
import com.xiang.xservice.auth.api.dto.resp.PermissionDTO;
import com.xiang.xservice.auth.service.entity.XPermission;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;
import java.util.List;
@Mapper(componentModel = "spring")
public interface XPermissionConvert {
XPermissionConvert INSTANCE = Mappers.getMapper(XPermissionConvert.class);
PermissionDTO toDTO(XPermission permission);
List<PermissionDTO> toDTOList(List<XPermission> permission);
}

View File

@@ -21,6 +21,11 @@ public class XUser implements Serializable {
*/ */
private Long id; private Long id;
/**
* 租户id
*/
private Long tenantId;
/** /**
* 用户名(昵称) * 用户名(昵称)
*/ */

View File

@@ -14,7 +14,7 @@ public interface XPermissionMapper {
List<XPermission> getPermissionList(XPermission permission); List<XPermission> getPermissionList(XPermission permission);
List<XPermission> getPermissionByIds(@Param("id") List<Long> ids); List<XPermission> getPermissionByIds(@Param("ids") List<Long> ids);
XPermission getPermissionById(@Param("id") Long id); XPermission getPermissionById(@Param("id") Long id);

View File

@@ -1,11 +1,16 @@
package com.xiang.xservice.auth.service.repository.mapper; package com.xiang.xservice.auth.service.repository.mapper;
import com.xiang.xservice.auth.service.entity.XRolePermission; import com.xiang.xservice.auth.service.entity.XRolePermission;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
@Repository
@Mapper
public interface XRolePermissionMapper { public interface XRolePermissionMapper {
List<XRolePermission> getRolePermissionsByRoleId(@Param("roleId") Long roleId); List<XRolePermission> getRolePermissionsByRoleId(@Param("roleId") Long roleId);
List<XRolePermission> getRolePermissionsByRoleIds(@Param("roleIds") List<Long> roleIds);
} }

View File

@@ -2,6 +2,7 @@ package com.xiang.xservice.auth.service.repository.mapper;
import com.xiang.xservice.auth.service.entity.XUserDept; import com.xiang.xservice.auth.service.entity.XUserDept;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
@@ -16,4 +17,6 @@ public interface XUserDeptMapper {
int addBatch(List<XUserDept> list); int addBatch(List<XUserDept> list);
int delByDeptId(Long deptId); int delByDeptId(Long deptId);
XUserDept getByUserId(@Param("id") Long userId);
} }

View File

@@ -9,6 +9,7 @@ import com.xiang.xservice.auth.api.dto.req.user.UserRoleUpdateRequest;
import com.xiang.xservice.auth.api.dto.req.user.UserUpdateRequest; import com.xiang.xservice.auth.api.dto.req.user.UserUpdateRequest;
import com.xiang.xservice.auth.api.dto.resp.LoginResp; import com.xiang.xservice.auth.api.dto.resp.LoginResp;
import com.xiang.xservice.auth.api.dto.resp.RegisterResp; import com.xiang.xservice.auth.api.dto.resp.RegisterResp;
import com.xiang.xservice.auth.api.dto.resp.UserDTO;
import com.xiang.xservice.auth.api.dto.resp.UserResp; import com.xiang.xservice.auth.api.dto.resp.UserResp;
import java.util.List; import java.util.List;
@@ -34,4 +35,6 @@ public interface XUserService {
Boolean setUserDept(UserDeptUpdateRequest request); Boolean setUserDept(UserDeptUpdateRequest request);
Boolean setUserRole(UserRoleUpdateRequest request); Boolean setUserRole(UserRoleUpdateRequest request);
UserDTO getUserDetail(Long userId);
} }

View File

@@ -3,6 +3,7 @@ package com.xiang.xservice.auth.service.service.impl;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.xiang.xservice.auth.api.code.Code01UserErrorCode; import com.xiang.xservice.auth.api.code.Code01UserErrorCode;
import com.xiang.xservice.auth.api.code.Code02RoleErrorCode; import com.xiang.xservice.auth.api.code.Code02RoleErrorCode;
import com.xiang.xservice.auth.api.code.Code03DeptErrorCode;
import com.xiang.xservice.auth.api.dto.req.LoginRequest; import com.xiang.xservice.auth.api.dto.req.LoginRequest;
import com.xiang.xservice.auth.api.dto.req.RegisterRequest; import com.xiang.xservice.auth.api.dto.req.RegisterRequest;
import com.xiang.xservice.auth.api.dto.req.user.UserAddRequest; import com.xiang.xservice.auth.api.dto.req.user.UserAddRequest;
@@ -12,13 +13,25 @@ import com.xiang.xservice.auth.api.dto.req.user.UserRoleUpdateRequest;
import com.xiang.xservice.auth.api.dto.req.user.UserUpdateRequest; import com.xiang.xservice.auth.api.dto.req.user.UserUpdateRequest;
import com.xiang.xservice.auth.api.dto.resp.LoginResp; import com.xiang.xservice.auth.api.dto.resp.LoginResp;
import com.xiang.xservice.auth.api.dto.resp.RegisterResp; import com.xiang.xservice.auth.api.dto.resp.RegisterResp;
import com.xiang.xservice.auth.api.dto.resp.UserDTO;
import com.xiang.xservice.auth.api.dto.resp.UserResp; import com.xiang.xservice.auth.api.dto.resp.UserResp;
import com.xiang.xservice.auth.service.convert.XDeptConvert;
import com.xiang.xservice.auth.service.convert.XPermissionConvert;
import com.xiang.xservice.auth.service.convert.XRoleConvert;
import com.xiang.xservice.auth.service.convert.XUserConvert; import com.xiang.xservice.auth.service.convert.XUserConvert;
import com.xiang.xservice.auth.service.entity.XDept;
import com.xiang.xservice.auth.service.entity.XPermission;
import com.xiang.xservice.auth.service.entity.XRole; import com.xiang.xservice.auth.service.entity.XRole;
import com.xiang.xservice.auth.service.entity.XRolePermission;
import com.xiang.xservice.auth.service.entity.XUser; import com.xiang.xservice.auth.service.entity.XUser;
import com.xiang.xservice.auth.service.entity.XUserDept;
import com.xiang.xservice.auth.service.entity.XUserRole; import com.xiang.xservice.auth.service.entity.XUserRole;
import com.xiang.xservice.auth.service.enums.UserStatusEnum; import com.xiang.xservice.auth.service.enums.UserStatusEnum;
import com.xiang.xservice.auth.service.repository.mapper.XDeptMapper;
import com.xiang.xservice.auth.service.repository.mapper.XPermissionMapper;
import com.xiang.xservice.auth.service.repository.mapper.XRoleMapper; import com.xiang.xservice.auth.service.repository.mapper.XRoleMapper;
import com.xiang.xservice.auth.service.repository.mapper.XRolePermissionMapper;
import com.xiang.xservice.auth.service.repository.mapper.XUserDeptMapper;
import com.xiang.xservice.auth.service.repository.mapper.XUserMapper; import com.xiang.xservice.auth.service.repository.mapper.XUserMapper;
import com.xiang.xservice.auth.service.repository.mapper.XUserRoleMapper; import com.xiang.xservice.auth.service.repository.mapper.XUserRoleMapper;
import com.xiang.xservice.auth.service.service.XUserService; import com.xiang.xservice.auth.service.service.XUserService;
@@ -57,6 +70,13 @@ public class XUserServiceImpl implements XUserService {
private final XUserConvert userConvert; private final XUserConvert userConvert;
private final XRoleMapper roleMapper; private final XRoleMapper roleMapper;
private final XUserRoleMapper userRoleMapper; private final XUserRoleMapper userRoleMapper;
private final XRoleConvert roleConvert;
private final XDeptMapper deptMapper;
private final XUserDeptMapper userDeptMapper;
private final XDeptConvert deptConvert;
private final XRolePermissionMapper rolePermissionMapper;
private final XPermissionMapper permissionMapper;
private final XPermissionConvert permissionConvert;
@Override @Override
public LoginResp login(LoginRequest request) { public LoginResp login(LoginRequest request) {
@@ -91,6 +111,8 @@ public class XUserServiceImpl implements XUserService {
.issuedAt(now) .issuedAt(now)
.expiresAt(now.plus(3, ChronoUnit.HOURS)) .expiresAt(now.plus(3, ChronoUnit.HOURS))
// 自定义 scope // 自定义 scope
.claim("userId", user.getId())
.claim("tenantId", user.getTenantId())
.claim("timestamp", System.currentTimeMillis()) .claim("timestamp", System.currentTimeMillis())
.claim("username", request.getUsername()) .claim("username", request.getUsername())
.claim("authorities", roleCodes) .claim("authorities", roleCodes)
@@ -222,4 +244,37 @@ public class XUserServiceImpl implements XUserService {
} }
return Boolean.FALSE; return Boolean.FALSE;
} }
@Override
public UserDTO getUserDetail(Long userId) {
UserDTO dto = new UserDTO();
XUser user = userMapper.getUserById(userId);
if (Objects.isNull(user)) {
throw new BusinessException(Code01UserErrorCode.USER_NOT_EXISTS);
}
dto.setUser(userConvert.toResp(user));
List<XUserRole> userRoles = userRoleMapper.getByUserId(userId);
List<Long> roleIds = userRoles.stream().map(XUserRole::getRoleId).toList();
List<XRole> roles = roleMapper.getRoleByIds(roleIds);
if (CollectionUtils.isEmpty(roles)) {
throw new BusinessException(Code02RoleErrorCode.ROLE_NOT_EXISTS);
}
dto.setRoles(roleConvert.toDTOList(roles));
XUserDept userDept = userDeptMapper.getByUserId(userId);
if (Objects.nonNull(userDept)) {
Long deptId = userDept.getDeptId();
XDept dept = deptMapper.getDeptById(deptId);
if (Objects.isNull(dept)) {
throw new BusinessException(Code03DeptErrorCode.DEPT_NOT_EXISTS);
}
dto.setDept(deptConvert.toDTO(dept));
}
List<XRolePermission> permissionsByRoleIds = rolePermissionMapper.getRolePermissionsByRoleIds(roleIds);
if (CollectionUtils.isNotEmpty(permissionsByRoleIds)) {
List<Long> permissionIds = permissionsByRoleIds.stream().map(XRolePermission::getPermissionId).toList();
List<XPermission> permissions = permissionMapper.getPermissionByIds(permissionIds);
dto.setPermissionRoles(permissionConvert.toDTOList(permissions));
}
return dto;
}
} }

View File

@@ -3,7 +3,7 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.xiang.xservice.auth.service.repository.mapper.XDeptMapper"> <mapper namespace="com.xiang.xservice.auth.service.repository.mapper.XDeptMapper">
<resultMap id="BaseResultMap" type="com.xiang.xservice.auth.service.entity.XUserDept" > <resultMap id="BaseResultMap" type="com.xiang.xservice.auth.service.entity.XDept" >
<result column="name" property="name" /> <result column="name" property="name" />
<result column="parent_id" property="parentId" /> <result column="parent_id" property="parentId" />
<result column="tree_path" property="treePath" /> <result column="tree_path" property="treePath" />

View File

@@ -171,7 +171,7 @@
select <include refid="Base_Column_List"/> select <include refid="Base_Column_List"/>
from x_permission from x_permission
where id in where id in
<foreach collection="list" item="id" open="(" close=")" separator=","> <foreach collection="ids" item="id" open="(" close=")" separator=",">
#{id} #{id}
</foreach> </foreach>
</select> </select>

View File

@@ -9,13 +9,21 @@
</resultMap> </resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
role_id, `role_id`,
permission_id `permission_id`
</sql> </sql>
<select id="getRolePermissionsByRoleId" resultMap="BaseResultMap"> <select id="getRolePermissionsByRoleId" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/> select <include refid="Base_Column_List"/>
from x_role_permission from x_role_permission
where role_id = #{roleId} where `role_id` = #{roleId}
</select>
<select id="getRolePermissionsByRoleIds" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/>
from x_role_permission
where `role_id` in
<foreach collection="roleIds" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</select> </select>

View File

@@ -21,6 +21,10 @@
<delete id="delByDeptId"> <delete id="delByDeptId">
delete from x_user_data_scope_dept where dept_id = #{deptId} delete from x_user_data_scope_dept where dept_id = #{deptId}
</delete> </delete>
<select id="getByUserId" resultMap="BaseResultMap">
select <include refid="Base_Column_List"/>
from x_user_data_scope_dept where user_id = #{id}
</select>
</mapper> </mapper>