mirror of
https://github.com/continew-org/continew-admin.git
synced 2025-09-09 20:57:21 +08:00
优化:用户新增类型字段,用于标识用户是系统内置或自定义
1.系统内置用户不允许禁用、删除、变更所属角色 2.删除用户时,自动删除用户和角色关联
This commit is contained in:
@@ -23,6 +23,7 @@ import lombok.Data;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
|
||||
import top.charles7c.cnadmin.common.base.BaseDO;
|
||||
import top.charles7c.cnadmin.common.enums.DataTypeEnum;
|
||||
import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
|
||||
import top.charles7c.cnadmin.common.enums.GenderEnum;
|
||||
|
||||
@@ -83,6 +84,11 @@ public class UserDO extends BaseDO {
|
||||
*/
|
||||
private DisEnableStatusEnum status;
|
||||
|
||||
/**
|
||||
* 类型(1:系统内置,2:自定义)
|
||||
*/
|
||||
private DataTypeEnum type;
|
||||
|
||||
/**
|
||||
* 最后一次修改密码时间
|
||||
*/
|
||||
|
@@ -18,6 +18,7 @@ package top.charles7c.cnadmin.system.model.vo;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@@ -28,8 +29,10 @@ import com.alibaba.excel.annotation.ExcelProperty;
|
||||
|
||||
import top.charles7c.cnadmin.common.base.BaseDetailVO;
|
||||
import top.charles7c.cnadmin.common.config.easyexcel.ExcelBaseEnumConverter;
|
||||
import top.charles7c.cnadmin.common.enums.DataTypeEnum;
|
||||
import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
|
||||
import top.charles7c.cnadmin.common.enums.GenderEnum;
|
||||
import top.charles7c.cnadmin.common.util.helper.LoginHelper;
|
||||
|
||||
/**
|
||||
* 用户详情信息
|
||||
@@ -93,6 +96,13 @@ public class UserDetailVO extends BaseDetailVO {
|
||||
@ExcelProperty(value = "状态", converter = ExcelBaseEnumConverter.class)
|
||||
private DisEnableStatusEnum status;
|
||||
|
||||
/**
|
||||
* 类型(1:系统内置,2:自定义)
|
||||
*/
|
||||
@Schema(description = "类型(1:系统内置,2:自定义)")
|
||||
@ExcelProperty(value = "类型", converter = ExcelBaseEnumConverter.class)
|
||||
private DataTypeEnum type;
|
||||
|
||||
/**
|
||||
* 描述
|
||||
*/
|
||||
@@ -131,4 +141,9 @@ public class UserDetailVO extends BaseDetailVO {
|
||||
@Schema(description = "所属角色")
|
||||
@ExcelProperty(value = "所属角色")
|
||||
private String roleNames;
|
||||
|
||||
@Override
|
||||
public Boolean getDisabled() {
|
||||
return DataTypeEnum.SYSTEM.equals(type) || Objects.equals(this.getId(), LoginHelper.getUserId());
|
||||
}
|
||||
}
|
||||
|
@@ -26,6 +26,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import cn.hutool.core.util.DesensitizedUtil;
|
||||
|
||||
import top.charles7c.cnadmin.common.base.BaseVO;
|
||||
import top.charles7c.cnadmin.common.enums.DataTypeEnum;
|
||||
import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
|
||||
import top.charles7c.cnadmin.common.enums.GenderEnum;
|
||||
import top.charles7c.cnadmin.common.util.helper.LoginHelper;
|
||||
@@ -85,6 +86,12 @@ public class UserVO extends BaseVO {
|
||||
@Schema(description = "状态(1:启用,2:禁用)")
|
||||
private DisEnableStatusEnum status;
|
||||
|
||||
/**
|
||||
* 类型(1:系统内置,2:自定义)
|
||||
*/
|
||||
@Schema(description = "类型(1:系统内置,2:自定义)")
|
||||
private DataTypeEnum type;
|
||||
|
||||
/**
|
||||
* 描述
|
||||
*/
|
||||
|
@@ -53,4 +53,12 @@ public interface UserRoleService {
|
||||
* @return 角色 ID 列表
|
||||
*/
|
||||
List<Long> listRoleIdByUserId(Long userId);
|
||||
|
||||
/**
|
||||
* 根据用户 ID 删除
|
||||
*
|
||||
* @param userIds
|
||||
* 用户 ID 列表
|
||||
*/
|
||||
void deleteByUserIds(List<Long> userIds);
|
||||
}
|
@@ -23,8 +23,6 @@ import lombok.RequiredArgsConstructor;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
|
||||
import top.charles7c.cnadmin.system.mapper.UserRoleMapper;
|
||||
import top.charles7c.cnadmin.system.model.entity.UserRoleDO;
|
||||
import top.charles7c.cnadmin.system.service.UserRoleService;
|
||||
@@ -43,9 +41,6 @@ public class UserRoleServiceImpl implements UserRoleService {
|
||||
|
||||
@Override
|
||||
public void save(List<Long> roleIds, Long userId) {
|
||||
if (CollUtil.isEmpty(roleIds)) {
|
||||
return;
|
||||
}
|
||||
// 删除原有关联
|
||||
userRoleMapper.lambdaUpdate().eq(UserRoleDO::getUserId, userId).remove();
|
||||
// 保存最新关联
|
||||
@@ -63,4 +58,9 @@ public class UserRoleServiceImpl implements UserRoleService {
|
||||
public List<Long> listRoleIdByUserId(Long userId) {
|
||||
return userRoleMapper.selectRoleIdByUserId(userId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteByUserIds(List<Long> userIds) {
|
||||
userRoleMapper.lambdaUpdate().in(UserRoleDO::getUserId, userIds).remove();
|
||||
}
|
||||
}
|
||||
|
@@ -19,6 +19,8 @@ package top.charles7c.cnadmin.system.service.impl;
|
||||
import java.io.File;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
@@ -28,6 +30,7 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.io.FileUtil;
|
||||
import cn.hutool.core.io.file.FileNameUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
@@ -37,6 +40,7 @@ import top.charles7c.cnadmin.common.config.properties.LocalStorageProperties;
|
||||
import top.charles7c.cnadmin.common.constant.FileConsts;
|
||||
import top.charles7c.cnadmin.common.constant.StringConsts;
|
||||
import top.charles7c.cnadmin.common.constant.SysConsts;
|
||||
import top.charles7c.cnadmin.common.enums.DataTypeEnum;
|
||||
import top.charles7c.cnadmin.common.enums.DisEnableStatusEnum;
|
||||
import top.charles7c.cnadmin.common.model.dto.LoginUser;
|
||||
import top.charles7c.cnadmin.common.service.CommonUserService;
|
||||
@@ -95,6 +99,16 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserVO,
|
||||
String username = request.getUsername();
|
||||
boolean isExists = this.checkNameExists(username, id);
|
||||
CheckUtils.throwIf(() -> isExists, String.format("修改失败,'%s'已存在", username));
|
||||
UserDO oldUser = super.getById(id);
|
||||
if (DataTypeEnum.SYSTEM.equals(oldUser.getType())) {
|
||||
CheckUtils.throwIf(() -> DisEnableStatusEnum.DISABLE.equals(request.getStatus()),
|
||||
String.format("'%s' 是系统内置用户,不允许禁用", oldUser.getNickname()));
|
||||
List<Long> oldRoleIdList =
|
||||
userRoleService.listRoleIdByUserId(id).stream().sorted().collect(Collectors.toList());
|
||||
List<Long> newRoleIdList = request.getRoleIds().stream().sorted().collect(Collectors.toList());
|
||||
CheckUtils.throwIf(() -> !CollUtil.isEqualList(newRoleIdList, oldRoleIdList),
|
||||
String.format("'%s' 是系统内置用户,不允许变更所属角色", oldUser.getNickname()));
|
||||
}
|
||||
|
||||
// 更新信息
|
||||
super.update(request, id);
|
||||
@@ -102,6 +116,21 @@ public class UserServiceImpl extends BaseServiceImpl<UserMapper, UserDO, UserVO,
|
||||
userRoleService.save(request.getRoleIds(), id);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void delete(List<Long> ids) {
|
||||
List<UserDO> list =
|
||||
baseMapper.lambdaQuery().select(UserDO::getNickname, UserDO::getType).in(UserDO::getId, ids).list();
|
||||
Optional<UserDO> isSystemData = list.stream().filter(u -> DataTypeEnum.SYSTEM.equals(u.getType())).findFirst();
|
||||
CheckUtils.throwIf(isSystemData::isPresent,
|
||||
String.format("所选用户 '%s' 是系统内置用户,不允许删除", isSystemData.orElseGet(UserDO::new).getNickname()));
|
||||
|
||||
// 删除用户
|
||||
super.delete(ids);
|
||||
// 删除用户和角色关联
|
||||
userRoleService.deleteByUserIds(ids);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void fillDetail(Object detailObj) {
|
||||
super.fillDetail(detailObj);
|
||||
|
Reference in New Issue
Block a user