Просмотр исходного кода

fix:用户和角色维护时唯一性校验

wangzaijun 7 месяцев назад
Родитель
Сommit
e3b4d455fe

+ 24 - 1
service-manage/src/main/java/com/simuwang/manage/service/impl/system/SysRoleServiceImpl.java

@@ -1,9 +1,12 @@
 package com.simuwang.manage.service.impl.system;
 
 import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.simuwang.base.common.exception.APIException;
 import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.common.support.command.BaseAddCmd;
 import com.simuwang.base.common.support.command.BaseEditCmd;
@@ -28,6 +31,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
+import java.util.function.Consumer;
 import java.util.stream.Collectors;
 
 @Service
@@ -49,7 +53,7 @@ public class SysRoleServiceImpl implements SysRoleService {
     @Override
     public <Q extends PageQuery> void wrapQuery(QueryWrapper<SysRoleDO> wrapper, Q query) {
         // 排除超级管理员
-        wrapper.ne("role_id", 1).notIn("role_key", "SYSTEM", "ADMIN");
+        wrapper.ne("role_id", 1).notIn("role_key", "SYSTEM", "ADMIN", "system", "admin");
         RoleQuery params = (RoleQuery) query;
         String keyword = params.getKeyword();
         if (StrUtil.isNotBlank(keyword)) {
@@ -70,6 +74,10 @@ public class SysRoleServiceImpl implements SysRoleService {
     public <C extends BaseAddCmd<SysRoleDO>> void insert(C command) {
         RoleAddCmd cmd = (RoleAddCmd) command;
         SysRoleDO entity = cmd.toEntity();
+        SysRoleDO role = this.getRole(entity);
+        if (role != null) {
+            throw new APIException("角色名称或权限字符已存在");
+        }
         this.mapper.insert(entity);
     }
 
@@ -77,6 +85,10 @@ public class SysRoleServiceImpl implements SysRoleService {
     public <C extends BaseEditCmd<SysRoleDO>> void update(C command) {
         RoleEditCmd cmd = (RoleEditCmd) command;
         SysRoleDO entity = cmd.toEntity();
+        SysRoleDO role = this.getRole(entity);
+        if (role != null) {
+            throw new APIException("角色名称或权限字符已存在");
+        }
         this.mapper.updateById(entity);
     }
 
@@ -109,4 +121,15 @@ public class SysRoleServiceImpl implements SysRoleService {
         List<OnlyIdNameDO> dataList = this.userAuthService.roleAssignPerms(query.getId());
         return dataList.stream().map(OnlyIdNameDO::toVo).collect(Collectors.toList());
     }
+
+    private SysRoleDO getRole(SysRoleDO entity) {
+        Consumer<LambdaQueryWrapper<SysRoleDO>> consumer = w -> w
+                .eq(SysRoleDO::getRoleName, entity.getRoleName())
+                .or()
+                .eq(SysRoleDO::getRoleKey, entity.getRoleKey());
+        LambdaQueryWrapper<SysRoleDO> wrapper = Wrappers.lambdaQuery(SysRoleDO.class)
+                .eq(entity.getRoleId() != null, SysRoleDO::getRoleId, entity.getRoleId())
+                .and(consumer);
+        return this.mapper.selectOne(wrapper);
+    }
 }

+ 20 - 1
service-manage/src/main/java/com/simuwang/manage/service/impl/system/SysUserServiceImpl.java

@@ -3,14 +3,17 @@ package com.simuwang.manage.service.impl.system;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.crypto.asymmetric.KeyType;
 import cn.hutool.crypto.asymmetric.RSA;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.simuwang.base.common.exception.APIException;
 import com.simuwang.base.common.support.MybatisPage;
 import com.simuwang.base.common.support.command.BaseAddCmd;
 import com.simuwang.base.common.support.command.BaseEditCmd;
-import com.simuwang.base.common.support.command.BaseIdsCmd;
 import com.simuwang.base.common.support.command.BaseIdStatusCmd;
+import com.simuwang.base.common.support.command.BaseIdsCmd;
 import com.simuwang.base.common.support.dos.OnlyIdNameDO;
 import com.simuwang.base.common.support.query.PageQuery;
 import com.simuwang.base.common.support.service.IService;
@@ -92,6 +95,11 @@ public class SysUserServiceImpl implements SysUserService {
     public <C extends BaseAddCmd<SysUserDO>> void insert(C command) {
         UserAddCmd cmd = (UserAddCmd) command;
         SysUserDO entity = cmd.toEntity();
+        SysUserDO temp = this.getUserByIdAndUsername(entity.getUserName(), null);
+        if (temp != null) {
+            throw new APIException("当前用户账号已存在");
+        }
+
         String originalPwd = entity.getPassword();
         // 密码在前端已加密
         if (StrUtil.isBlank(originalPwd)) {
@@ -107,6 +115,10 @@ public class SysUserServiceImpl implements SysUserService {
     public <C extends BaseEditCmd<SysUserDO>> void update(C command) {
         UserEditCmd cmd = (UserEditCmd) command;
         SysUserDO entity = cmd.toEntity();
+        SysUserDO temp = this.getUserByIdAndUsername(entity.getUserName(), entity.getUserId());
+        if (temp != null) {
+            throw new APIException("当前用户账号已存在");
+        }
         // 密码在前端已加密
         this.mapper.updateById(entity);
     }
@@ -141,4 +153,11 @@ public class SysUserServiceImpl implements SysUserService {
         List<OnlyIdNameDO> dataList = this.userAuthService.userBindRoles(query.getId());
         return dataList.stream().map(OnlyIdNameDO::toVo).collect(Collectors.toList());
     }
+
+    private SysUserDO getUserByIdAndUsername(String username, Integer userId) {
+        LambdaQueryWrapper<SysUserDO> wrapper = Wrappers.lambdaQuery(SysUserDO.class)
+                .eq(SysUserDO::getUserName, username)
+                .eq(userId != null, SysUserDO::getUserId, userId);
+        return this.mapper.selectOne(wrapper);
+    }
 }