From 139cb337d7bf1ecc82d3582358d9410d2cd9fb62 Mon Sep 17 00:00:00 2001 From: Charles7c Date: Sun, 19 Mar 2023 23:39:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=B1=BB=E5=9E=8B=E5=AD=97=E6=AE=B5=EF=BC=8C?= =?UTF-8?q?=E7=94=A8=E4=BA=8E=E6=A0=87=E8=AF=86=E7=94=A8=E6=88=B7=E6=98=AF?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E5=86=85=E7=BD=AE=E6=88=96=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.系统内置用户不允许禁用、删除、变更所属角色 2.删除用户时,自动删除用户和角色关联 --- .../cnadmin/system/model/entity/UserDO.java | 6 ++++ .../cnadmin/system/model/vo/UserDetailVO.java | 15 ++++++++ .../cnadmin/system/model/vo/UserVO.java | 7 ++++ .../system/service/UserRoleService.java | 8 +++++ .../service/impl/UserRoleServiceImpl.java | 10 +++--- .../system/service/impl/UserServiceImpl.java | 29 +++++++++++++++ continew-admin-ui/src/api/system/user.ts | 1 + .../src/views/system/user/index.vue | 35 +++++++++++++------ .../changelog/v0.0.1/continew-admin_data.sql | 4 +-- .../changelog/v0.0.1/continew-admin_table.sql | 1 + 10 files changed, 99 insertions(+), 17 deletions(-) diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/entity/UserDO.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/entity/UserDO.java index 81c5a87a..086afbe8 100644 --- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/entity/UserDO.java +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/entity/UserDO.java @@ -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; + /** * 最后一次修改密码时间 */ diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/vo/UserDetailVO.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/vo/UserDetailVO.java index 71d5a35b..fa31cf14 100644 --- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/vo/UserDetailVO.java +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/vo/UserDetailVO.java @@ -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()); + } } diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/vo/UserVO.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/vo/UserVO.java index c5328743..faad073b 100644 --- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/vo/UserVO.java +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/model/vo/UserVO.java @@ -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; + /** * 描述 */ diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/UserRoleService.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/UserRoleService.java index fd8e9660..46ce389e 100644 --- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/UserRoleService.java +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/UserRoleService.java @@ -53,4 +53,12 @@ public interface UserRoleService { * @return 角色 ID 列表 */ List listRoleIdByUserId(Long userId); + + /** + * 根据用户 ID 删除 + * + * @param userIds + * 用户 ID 列表 + */ + void deleteByUserIds(List userIds); } \ No newline at end of file diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/UserRoleServiceImpl.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/UserRoleServiceImpl.java index e80bc61a..feb5e9be 100644 --- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/UserRoleServiceImpl.java +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/UserRoleServiceImpl.java @@ -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 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 listRoleIdByUserId(Long userId) { return userRoleMapper.selectRoleIdByUserId(userId); } + + @Override + public void deleteByUserIds(List userIds) { + userRoleMapper.lambdaUpdate().in(UserRoleDO::getUserId, userIds).remove(); + } } diff --git a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/UserServiceImpl.java b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/UserServiceImpl.java index 9df420d8..11012650 100644 --- a/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/UserServiceImpl.java +++ b/continew-admin-system/src/main/java/top/charles7c/cnadmin/system/service/impl/UserServiceImpl.java @@ -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 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 oldRoleIdList = + userRoleService.listRoleIdByUserId(id).stream().sorted().collect(Collectors.toList()); + List 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 ids) { + List list = + baseMapper.lambdaQuery().select(UserDO::getNickname, UserDO::getType).in(UserDO::getId, ids).list(); + Optional 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); diff --git a/continew-admin-ui/src/api/system/user.ts b/continew-admin-ui/src/api/system/user.ts index 6e284381..fe8239d4 100644 --- a/continew-admin-ui/src/api/system/user.ts +++ b/continew-admin-ui/src/api/system/user.ts @@ -12,6 +12,7 @@ export interface UserRecord { phone?: string; description?: string; status?: number; + type?: number; pwdResetTime?: string; createUserString?: string; createTime?: string; diff --git a/continew-admin-ui/src/views/system/user/index.vue b/continew-admin-ui/src/views/system/user/index.vue index 0166b15f..f40a768e 100644 --- a/continew-admin-ui/src/views/system/user/index.vue +++ b/continew-admin-ui/src/views/system/user/index.vue @@ -139,15 +139,15 @@ >