Optimize user management api
This commit is contained in:
@@ -9,6 +9,7 @@ import top.fatweb.api.param.authentication.LoginParam
|
|||||||
import top.fatweb.api.param.authentication.UserAddParam
|
import top.fatweb.api.param.authentication.UserAddParam
|
||||||
import top.fatweb.api.param.authentication.UserUpdateParam
|
import top.fatweb.api.param.authentication.UserUpdateParam
|
||||||
import top.fatweb.api.vo.PageVo
|
import top.fatweb.api.vo.PageVo
|
||||||
|
import top.fatweb.api.vo.permission.UserWithInfoVo
|
||||||
import top.fatweb.api.vo.permission.UserWithPasswordRoleInfoVo
|
import top.fatweb.api.vo.permission.UserWithPasswordRoleInfoVo
|
||||||
import top.fatweb.api.vo.permission.UserWithPowerInfoVo
|
import top.fatweb.api.vo.permission.UserWithPowerInfoVo
|
||||||
import top.fatweb.api.vo.permission.UserWithRoleInfoVo
|
import top.fatweb.api.vo.permission.UserWithRoleInfoVo
|
||||||
@@ -81,6 +82,24 @@ object UserConverter {
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
fun userToUserWithInfoVo(user: User) = UserWithInfoVo(
|
||||||
|
id = user.id,
|
||||||
|
username = user.username,
|
||||||
|
locking = user.locking?.let { it == 1 },
|
||||||
|
expiration = user.expiration,
|
||||||
|
credentialsExpiration = user.credentialsExpiration,
|
||||||
|
enable = user.enable?.let { it == 1 },
|
||||||
|
currentLoginTime = user.currentLoginTime,
|
||||||
|
currentLoginIp = user.currentLoginIp,
|
||||||
|
lastLoginTime = user.lastLoginTime,
|
||||||
|
lastLoginIp = user.lastLoginIp,
|
||||||
|
createTime = user.createTime,
|
||||||
|
updateTime = user.updateTime,
|
||||||
|
userInfo = user.userInfo?.let {
|
||||||
|
UserInfoConverter.userInfoToUserInfoVo(it)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
fun userToUserWithPasswordRoleInfoVo(user: User) = UserWithPasswordRoleInfoVo(
|
fun userToUserWithPasswordRoleInfoVo(user: User) = UserWithPasswordRoleInfoVo(
|
||||||
id = user.id,
|
id = user.id,
|
||||||
username = user.username,
|
username = user.username,
|
||||||
|
|||||||
@@ -14,13 +14,13 @@ import top.fatweb.api.entity.permission.User
|
|||||||
*/
|
*/
|
||||||
@Mapper
|
@Mapper
|
||||||
interface UserMapper : BaseMapper<User> {
|
interface UserMapper : BaseMapper<User> {
|
||||||
fun getOneWithPowerInfoByUsername(@Param("username")username: String): User?
|
fun selectOneWithPowerInfoByUsername(@Param("username")username: String): User?
|
||||||
|
|
||||||
fun selectPage(page: IPage<Long>, searchValue: String?, searchRegex: Boolean): IPage<Long>
|
fun selectPage(page: IPage<Long>, searchValue: String?, searchRegex: Boolean): IPage<Long>
|
||||||
|
|
||||||
fun getWithRoleInfoByList(userIds: List<Long>): List<User>?
|
fun selectListWithRoleInfoByIds(userIds: List<Long>): List<User>?
|
||||||
|
|
||||||
fun getOneWithRoleInfo(id: Long): User?
|
fun selectOneWithRoleInfoById(id: Long): User?
|
||||||
|
|
||||||
fun getListWithRoleInfo(): List<User>
|
fun selectListWithInfo(): List<User>
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import top.fatweb.api.param.authentication.UserDeleteParam
|
|||||||
import top.fatweb.api.param.authentication.UserGetParam
|
import top.fatweb.api.param.authentication.UserGetParam
|
||||||
import top.fatweb.api.param.authentication.UserUpdateParam
|
import top.fatweb.api.param.authentication.UserUpdateParam
|
||||||
import top.fatweb.api.vo.PageVo
|
import top.fatweb.api.vo.PageVo
|
||||||
|
import top.fatweb.api.vo.permission.UserWithInfoVo
|
||||||
import top.fatweb.api.vo.permission.UserWithPasswordRoleInfoVo
|
import top.fatweb.api.vo.permission.UserWithPasswordRoleInfoVo
|
||||||
import top.fatweb.api.vo.permission.UserWithPowerInfoVo
|
import top.fatweb.api.vo.permission.UserWithPowerInfoVo
|
||||||
import top.fatweb.api.vo.permission.UserWithRoleInfoVo
|
import top.fatweb.api.vo.permission.UserWithRoleInfoVo
|
||||||
@@ -18,7 +19,7 @@ import top.fatweb.api.vo.permission.UserWithRoleInfoVo
|
|||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
interface IUserService : IService<User> {
|
interface IUserService : IService<User> {
|
||||||
fun getUserWithPower(username: String): User?
|
fun getUserWithPowerByUsername(username: String): User?
|
||||||
|
|
||||||
fun getInfo(): UserWithPowerInfoVo?
|
fun getInfo(): UserWithPowerInfoVo?
|
||||||
|
|
||||||
@@ -26,7 +27,7 @@ interface IUserService : IService<User> {
|
|||||||
|
|
||||||
fun getOne(id: Long): UserWithRoleInfoVo?
|
fun getOne(id: Long): UserWithRoleInfoVo?
|
||||||
|
|
||||||
fun getList(): List<UserWithRoleInfoVo>
|
fun getList(): List<UserWithInfoVo>
|
||||||
|
|
||||||
fun add(userAddParam: UserAddParam): UserWithPasswordRoleInfoVo?
|
fun add(userAddParam: UserAddParam): UserWithPasswordRoleInfoVo?
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import top.fatweb.api.service.permission.IUserService
|
|||||||
@Service
|
@Service
|
||||||
class UserDetailsServiceImpl(val userService: IUserService) : UserDetailsService {
|
class UserDetailsServiceImpl(val userService: IUserService) : UserDetailsService {
|
||||||
override fun loadUserByUsername(username: String): UserDetails {
|
override fun loadUserByUsername(username: String): UserDetails {
|
||||||
val user = userService.getUserWithPower(username)
|
val user = userService.getUserWithPowerByUsername(username)
|
||||||
user ?: let { throw Exception("Username not found") }
|
user ?: let { throw Exception("Username not found") }
|
||||||
|
|
||||||
return LoginUser(user)
|
return LoginUser(user)
|
||||||
|
|||||||
@@ -41,8 +41,8 @@ class UserServiceImpl(
|
|||||||
private val userRoleService: IUserRoleService,
|
private val userRoleService: IUserRoleService,
|
||||||
private val userGroupService: IUserGroupService
|
private val userGroupService: IUserGroupService
|
||||||
) : ServiceImpl<UserMapper, User>(), IUserService {
|
) : ServiceImpl<UserMapper, User>(), IUserService {
|
||||||
override fun getUserWithPower(username: String): User? {
|
override fun getUserWithPowerByUsername(username: String): User? {
|
||||||
val user = baseMapper.getOneWithPowerInfoByUsername(username)
|
val user = baseMapper.selectOneWithPowerInfoByUsername(username)
|
||||||
user ?: let { return null }
|
user ?: let { return null }
|
||||||
|
|
||||||
if (user.id == 0L) {
|
if (user.id == 0L) {
|
||||||
@@ -56,7 +56,7 @@ class UserServiceImpl(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun getInfo() = WebUtil.getLoginUsername()
|
override fun getInfo() = WebUtil.getLoginUsername()
|
||||||
?.let { username -> getUserWithPower(username)?.let { UserConverter.userToUserWithPowerInfoVo(it) } }
|
?.let { username -> getUserWithPowerByUsername(username)?.let { UserConverter.userToUserWithPowerInfoVo(it) } }
|
||||||
|
|
||||||
override fun getPage(userGetParam: UserGetParam?): PageVo<UserWithRoleInfoVo> {
|
override fun getPage(userGetParam: UserGetParam?): PageVo<UserWithRoleInfoVo> {
|
||||||
val userIdsPage = Page<Long>(userGetParam?.currentPage ?: 1, userGetParam?.pageSize ?: 20)
|
val userIdsPage = Page<Long>(userGetParam?.currentPage ?: 1, userGetParam?.pageSize ?: 20)
|
||||||
@@ -67,16 +67,16 @@ class UserServiceImpl(
|
|||||||
baseMapper.selectPage(userIdsPage, userGetParam?.searchValue, userGetParam?.searchRegex ?: false)
|
baseMapper.selectPage(userIdsPage, userGetParam?.searchValue, userGetParam?.searchRegex ?: false)
|
||||||
val userPage = Page<User>(userIdsIPage.current, userIdsIPage.size, userIdsIPage.total)
|
val userPage = Page<User>(userIdsIPage.current, userIdsIPage.size, userIdsIPage.total)
|
||||||
if (userIdsIPage.total > 0) {
|
if (userIdsIPage.total > 0) {
|
||||||
userPage.setRecords(baseMapper.getWithRoleInfoByList(userIdsIPage.records))
|
userPage.setRecords(baseMapper.selectListWithRoleInfoByIds(userIdsIPage.records))
|
||||||
}
|
}
|
||||||
|
|
||||||
return UserConverter.userPageToUserWithRoleInfoPageVo(userPage)
|
return UserConverter.userPageToUserWithRoleInfoPageVo(userPage)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getOne(id: Long) =
|
override fun getOne(id: Long) =
|
||||||
baseMapper.getOneWithRoleInfo(id)?.let { UserConverter.userToUserWithRoleInfoVo(it) }
|
baseMapper.selectOneWithRoleInfoById(id)?.let { UserConverter.userToUserWithRoleInfoVo(it) }
|
||||||
|
|
||||||
override fun getList() = baseMapper.getListWithRoleInfo().map { UserConverter.userToUserWithRoleInfoVo(it) }
|
override fun getList() = baseMapper.selectListWithInfo().map { UserConverter.userToUserWithInfoVo(it) }
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
override fun add(userAddParam: UserAddParam): UserWithPasswordRoleInfoVo? {
|
override fun add(userAddParam: UserAddParam): UserWithPasswordRoleInfoVo? {
|
||||||
|
|||||||
@@ -0,0 +1,54 @@
|
|||||||
|
package top.fatweb.api.vo.permission
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.annotation.JsonSerialize
|
||||||
|
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema
|
||||||
|
import java.time.LocalDateTime
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User with information value object
|
||||||
|
*
|
||||||
|
* @author FatttSnake, fatttsnake@gmail.com
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
@Schema(description = "用户信息返回参数")
|
||||||
|
data class UserWithInfoVo(
|
||||||
|
@JsonSerialize(using = ToStringSerializer::class)
|
||||||
|
val id: Long?,
|
||||||
|
|
||||||
|
@Schema(description = "用户名", example = "User")
|
||||||
|
val username: String?,
|
||||||
|
|
||||||
|
@Schema(description = "是否锁定", example = "false")
|
||||||
|
val locking: Boolean?,
|
||||||
|
|
||||||
|
@Schema(description = "过期时间", example = "1900-01-01T00:00:00.000Z")
|
||||||
|
val expiration: LocalDateTime?,
|
||||||
|
|
||||||
|
@Schema(description = "认证过期时间", example = "1900-01-01T00:00:00.000Z")
|
||||||
|
val credentialsExpiration: LocalDateTime?,
|
||||||
|
|
||||||
|
@Schema(description = "是否启用", example = "true")
|
||||||
|
val enable: Boolean?,
|
||||||
|
|
||||||
|
@Schema(description = "当前登录时间", example = "1900-01-01T00:00:00.000Z")
|
||||||
|
val currentLoginTime: LocalDateTime?,
|
||||||
|
|
||||||
|
@Schema(description = "当前登录 IP", example = "1.1.1.1")
|
||||||
|
val currentLoginIp: String?,
|
||||||
|
|
||||||
|
@Schema(description = "最后登录时间", example = "1900-01-01T00:00:00.000Z")
|
||||||
|
val lastLoginTime: LocalDateTime?,
|
||||||
|
|
||||||
|
@Schema(description = "最后登录 IP", example = "1.1.1.1")
|
||||||
|
val lastLoginIp: String?,
|
||||||
|
|
||||||
|
@Schema(description = "创建时间", example = "1900-01-01T00:00:00.000Z")
|
||||||
|
val createTime: LocalDateTime?,
|
||||||
|
|
||||||
|
@Schema(description = "修改时间", example = "1900-01-01T00:00:00.000Z")
|
||||||
|
val updateTime: LocalDateTime?,
|
||||||
|
|
||||||
|
@Schema(description = "用户资料")
|
||||||
|
val userInfo: UserInfoVo?
|
||||||
|
)
|
||||||
@@ -6,7 +6,7 @@ import io.swagger.v3.oas.annotations.media.Schema
|
|||||||
import java.time.LocalDateTime
|
import java.time.LocalDateTime
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* User with role information value object
|
* User with password role information value object
|
||||||
*
|
*
|
||||||
* @author FatttSnake, fatttsnake@gmail.com
|
* @author FatttSnake, fatttsnake@gmail.com
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="top.fatweb.api.mapper.permission.UserMapper">
|
<mapper namespace="top.fatweb.api.mapper.permission.UserMapper">
|
||||||
<select id="getOneWithPowerInfoByUsername" resultMap="userWithPowerInfoMap">
|
<select id="selectOneWithPowerInfoByUsername" resultMap="userWithPowerInfoMap">
|
||||||
select t_user.id as user_id,
|
select t_user.id as user_id,
|
||||||
t_user.username as user_username,
|
t_user.username as user_username,
|
||||||
t_user.password as user_password,
|
t_user.password as user_password,
|
||||||
@@ -69,7 +69,7 @@
|
|||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="getWithRoleInfoByList" resultMap="userWithRoleInfoMap">
|
<select id="selectListWithRoleInfoByIds" resultMap="userWithRoleInfoMap">
|
||||||
select t_user.id as user_id,
|
select t_user.id as user_id,
|
||||||
t_user.username as user_username,
|
t_user.username as user_username,
|
||||||
t_user.password as user_password,
|
t_user.password as user_password,
|
||||||
@@ -107,10 +107,10 @@
|
|||||||
from t_user
|
from t_user
|
||||||
left join (select * from t_user_info where deleted = 0) as tui on t_user.id = tui.user_id
|
left join (select * from t_user_info where deleted = 0) as tui on t_user.id = tui.user_id
|
||||||
left join (select * from t_user_group where deleted = 0) as tug on t_user.id = tug.user_id
|
left join (select * from t_user_group where deleted = 0) as tug on t_user.id = tug.user_id
|
||||||
left join (select * from t_group where deleted = 0 and enable = 1) as tg on tg.id = tug.group_id
|
left join (select * from t_group where deleted = 0) as tg on tg.id = tug.group_id
|
||||||
left join (select * from t_role_group where deleted = 0) as trg on tg.id = trg.group_id
|
left join (select * from t_role_group where deleted = 0) as trg on tg.id = trg.group_id
|
||||||
left join (select * from t_user_role where deleted = 0) as tur on t_user.id = tur.user_id
|
left join (select * from t_user_role where deleted = 0) as tur on t_user.id = tur.user_id
|
||||||
left join (select * from t_role where deleted = 0 and enable = 1) as tr
|
left join (select * from t_role where deleted = 0) as tr
|
||||||
on tr.id = trg.role_id or tr.id = tur.role_id
|
on tr.id = trg.role_id or tr.id = tur.role_id
|
||||||
<where>
|
<where>
|
||||||
<foreach collection="userIds" item="item" index="index" open="and t_user.id in (" separator="," close=")"
|
<foreach collection="userIds" item="item" index="index" open="and t_user.id in (" separator="," close=")"
|
||||||
@@ -120,7 +120,7 @@
|
|||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="getOneWithRoleInfo" resultMap="userWithRoleInfoMap">
|
<select id="selectOneWithRoleInfoById" resultMap="userWithRoleInfoMap">
|
||||||
select t_user.id as user_id,
|
select t_user.id as user_id,
|
||||||
t_user.username as user_username,
|
t_user.username as user_username,
|
||||||
t_user.password as user_password,
|
t_user.password as user_password,
|
||||||
@@ -158,16 +158,16 @@
|
|||||||
from t_user
|
from t_user
|
||||||
left join (select * from t_user_info where deleted = 0) as tui on t_user.id = tui.user_id
|
left join (select * from t_user_info where deleted = 0) as tui on t_user.id = tui.user_id
|
||||||
left join (select * from t_user_group where deleted = 0) as tug on t_user.id = tug.user_id
|
left join (select * from t_user_group where deleted = 0) as tug on t_user.id = tug.user_id
|
||||||
left join (select * from t_group where deleted = 0 and enable = 1) as tg on tg.id = tug.group_id
|
left join (select * from t_group where deleted = 0) as tg on tg.id = tug.group_id
|
||||||
left join (select * from t_role_group where deleted = 0) as trg on tg.id = trg.group_id
|
left join (select * from t_role_group where deleted = 0) as trg on tg.id = trg.group_id
|
||||||
left join (select * from t_user_role where deleted = 0) as tur on t_user.id = tur.user_id
|
left join (select * from t_user_role where deleted = 0) as tur on t_user.id = tur.user_id
|
||||||
left join (select * from t_role where deleted = 0 and enable = 1) as tr
|
left join (select * from t_role where deleted = 0) as tr
|
||||||
on tr.id = trg.role_id or tr.id = tur.role_id
|
on tr.id = trg.role_id or tr.id = tur.role_id
|
||||||
where t_user.deleted = 0
|
where t_user.deleted = 0
|
||||||
and t_user.id = #{id}
|
and t_user.id = #{id}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="getListWithRoleInfo" resultMap="userWithRoleInfoMap">
|
<select id="selectListWithInfo" resultMap="userWithInfoMap">
|
||||||
select t_user.id as user_id,
|
select t_user.id as user_id,
|
||||||
t_user.username as user_username,
|
t_user.username as user_username,
|
||||||
t_user.password as user_password,
|
t_user.password as user_password,
|
||||||
@@ -191,25 +191,9 @@
|
|||||||
tui.create_time as user_info_create_time,
|
tui.create_time as user_info_create_time,
|
||||||
tui.update_time as user_info_update_time,
|
tui.update_time as user_info_update_time,
|
||||||
tui.deleted as user_info_deleted,
|
tui.deleted as user_info_deleted,
|
||||||
tui.version as user_info_version,
|
tui.version as user_info_version
|
||||||
tr.id as role_id,
|
|
||||||
tr.name as role_name,
|
|
||||||
tr.enable as role_enable,
|
|
||||||
tr.deleted as role_deleted,
|
|
||||||
tr.version as role_version,
|
|
||||||
tg.id as group_id,
|
|
||||||
tg.name as group_name,
|
|
||||||
tg.enable as group_enable,
|
|
||||||
tg.deleted as group_deleted,
|
|
||||||
tg.version as group_version
|
|
||||||
from t_user
|
from t_user
|
||||||
left join (select * from t_user_info where deleted = 0) as tui on t_user.id = tui.user_id
|
left join (select * from t_user_info where deleted = 0) as tui on t_user.id = tui.user_id
|
||||||
left join (select * from t_user_group where deleted = 0) as tug on t_user.id = tug.user_id
|
|
||||||
left join (select * from t_group where deleted = 0 and enable = 1) as tg on tg.id = tug.group_id
|
|
||||||
left join (select * from t_role_group where deleted = 0) as trg on tg.id = trg.group_id
|
|
||||||
left join (select * from t_user_role where deleted = 0) as tur on t_user.id = tur.user_id
|
|
||||||
left join (select * from t_role where deleted = 0 and enable = 1) as tr
|
|
||||||
on tr.id = trg.role_id or tr.id = tur.role_id
|
|
||||||
where t_user.deleted = 0
|
where t_user.deleted = 0
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
@@ -230,17 +214,19 @@
|
|||||||
<result property="version" column="user_version"/>
|
<result property="version" column="user_version"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<resultMap id="userWithPowerInfoMap" type="user" extends="userBaseMap">
|
<resultMap id="userWithInfoMap" type="user" extends="userBaseMap">
|
||||||
<result property="password" column="user_password"/>
|
|
||||||
<association property="userInfo" resultMap="top.fatweb.api.mapper.permission.UserInfoMapper.userInfoMap"/>
|
<association property="userInfo" resultMap="top.fatweb.api.mapper.permission.UserInfoMapper.userInfoMap"/>
|
||||||
|
</resultMap>
|
||||||
|
|
||||||
|
<resultMap id="userWithPowerInfoMap" type="user" extends="userWithInfoMap">
|
||||||
|
<result property="password" column="user_password"/>
|
||||||
<collection property="modules" resultMap="top.fatweb.api.mapper.permission.ModuleMapper.moduleMap"/>
|
<collection property="modules" resultMap="top.fatweb.api.mapper.permission.ModuleMapper.moduleMap"/>
|
||||||
<collection property="menus" resultMap="top.fatweb.api.mapper.permission.MenuMapper.menuMap"/>
|
<collection property="menus" resultMap="top.fatweb.api.mapper.permission.MenuMapper.menuMap"/>
|
||||||
<collection property="elements" resultMap="top.fatweb.api.mapper.permission.ElementMapper.elementMap"/>
|
<collection property="elements" resultMap="top.fatweb.api.mapper.permission.ElementMapper.elementMap"/>
|
||||||
<collection property="operations" resultMap="top.fatweb.api.mapper.permission.OperationMapper.operationMap"/>
|
<collection property="operations" resultMap="top.fatweb.api.mapper.permission.OperationMapper.operationMap"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<resultMap id="userWithRoleInfoMap" type="user" extends="userBaseMap">
|
<resultMap id="userWithRoleInfoMap" type="user" extends="userWithInfoMap">
|
||||||
<association property="userInfo" resultMap="top.fatweb.api.mapper.permission.UserInfoMapper.userInfoMap"/>
|
|
||||||
<collection property="roles" resultMap="top.fatweb.api.mapper.permission.RoleMapper.roleMap"/>
|
<collection property="roles" resultMap="top.fatweb.api.mapper.permission.RoleMapper.roleMap"/>
|
||||||
<collection property="groups" resultMap="top.fatweb.api.mapper.permission.GroupMapper.groupMap"/>
|
<collection property="groups" resultMap="top.fatweb.api.mapper.permission.GroupMapper.groupMap"/>
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|||||||
Reference in New Issue
Block a user