Pārlūkot izejas kodu

新增踢出用户接口(v2)

tsurumure 9 mēneši atpakaļ
vecāks
revīzija
6a3bc45670

+ 17 - 9
src/main/java/com/backendsys/modules/system/controller/SysUserV2Controller.java

@@ -1,20 +1,15 @@
 package com.backendsys.modules.system.controller;
 
-import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.ClassUtil;
-import com.backendsys.aspect.QueryNullCheck;
 import com.backendsys.exception.CustException;
 import com.backendsys.modules.common.config.security.enums.SecurityEnum;
 import com.backendsys.modules.common.config.security.utils.SecurityUtil;
 import com.backendsys.modules.common.utils.Result;
 import com.backendsys.modules.system.entity.SysUser.SysUserDTO;
 import com.backendsys.modules.system.service.SysUserV2Service;
-import com.backendsys.service.System.SysUserService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
-import jakarta.servlet.http.HttpServletRequest;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
@@ -64,7 +59,7 @@ public class SysUserV2Controller {
         // 查询他人的用户信息
         // - 查询自己 (无需权限)
         // - 查询他人 (需要权限或超级管理员)
-        if (user_id != SecurityUtil.getUserId() && !SecurityUtil.hasPermission("3.2.1.2") && !SecurityUtil.isSuper()) {
+        if (!user_id.equals(SecurityUtil.getUserId()) && !SecurityUtil.hasPermission("3.2.1.2") && !SecurityUtil.isSuper()) {
             throw new CustException(SecurityEnum.NOAUTH);
         }
         return Result.success().put("data", sysUserV2Service.selectUserInfo(user_id));
@@ -86,7 +81,7 @@ public class SysUserV2Controller {
         // 查询他人的用户信息
         // - 查询自己 (无需权限)
         // - 查询他人 (需要子权限或超级管理员)
-        if (user_id != SecurityUtil.getUserId() && !SecurityUtil.hasPermission("3.4.1.2") && !SecurityUtil.isSuper()) {
+        if (!user_id.equals(SecurityUtil.getUserId()) && !SecurityUtil.hasPermission("3.4.1.2") && !SecurityUtil.isSuper()) {
             throw new CustException(SecurityEnum.NOAUTH);
         }
         return Result.success().put("data", sysUserV2Service.selectUserModule(user_id));
@@ -121,7 +116,7 @@ public class SysUserV2Controller {
         // 编辑他人的用户信息
         // - 编辑自己 (无需权限)
         // - 编辑他人 (需要子权限或超级管理员)
-        if (user_id != SecurityUtil.getUserId() && !SecurityUtil.hasPermission("3.2.3.2") && !SecurityUtil.isSuper()) {
+        if (!user_id.equals(SecurityUtil.getUserId()) && !SecurityUtil.hasPermission("3.2.3.2") && !SecurityUtil.isSuper()) {
             throw new CustException(SecurityEnum.NOAUTH);
         }
 
@@ -152,7 +147,7 @@ public class SysUserV2Controller {
         // 编辑他人的用户信息
         // - 编辑自己 (无需权限)
         // - 编辑他人 (需要子权限或超级管理员)
-        if (user_id != SecurityUtil.getUserId() && !SecurityUtil.hasPermission("3.2.3.2") && !SecurityUtil.isSuper()) {
+        if (!user_id.equals(SecurityUtil.getUserId()) && !SecurityUtil.hasPermission("3.2.3.2") && !SecurityUtil.isSuper()) {
             throw new CustException(SecurityEnum.NOAUTH);
         }
 
@@ -172,4 +167,17 @@ public class SysUserV2Controller {
         return Result.success().put("data", sysUserV2Service.deleteUser(user_ids));
     }
 
+
+    @Operation(summary = "踢出系统用户")
+    @PreAuthorize("@ss.hasPermi('3.2.7')")
+    @PostMapping("/api/v2/system/user/kickUser")
+    public Result kickUser(@Validated(SysUserDTO.Kick.class) @RequestBody SysUserDTO sysUserDTO) {
+
+        Long user_id = sysUserDTO.getUser_id();
+        if (user_id.equals(1L)) throw new CustException("不能踢出超管账号");
+        if (user_id.equals(SecurityUtil.getUserId())) throw new CustException("不能踢出自己的账号");
+
+        return Result.success().put("data", sysUserV2Service.kickUser(user_id));
+    }
+
 }

+ 2 - 1
src/main/java/com/backendsys/modules/system/entity/SysUser/SysUserDTO.java

@@ -20,6 +20,7 @@ public class SysUserDTO {
   public static interface UpdatePassword{}
   public static interface Audit{}
   public static interface Delete{}
+  public static interface Kick{}
 
   /**
    * sys_user
@@ -39,7 +40,7 @@ public class SysUserDTO {
   /**
    * sys_user_info
    */
-  @NotNull(message="user_id 不能为空", groups = { Detail.class, Audit.class })
+  @NotNull(message="user_id 不能为空", groups = { Detail.class, Kick.class, Audit.class })
   private Long user_id;
 
   @NotNull(message="user_ids 不能为空", groups = { Delete.class })

+ 2 - 1
src/main/java/com/backendsys/modules/system/service/SysUserV2Service.java

@@ -25,8 +25,9 @@ public interface SysUserV2Service extends IService<SysUser> {
     Map<String, Object> updateUserInfo(SysUserDTO sysUserDTO);
     // 编辑系统用户密码
     Map<String, Object> updateUserPassword(SysUserDTO sysUserDTO);
-
     // 删除系统用户
     Map<String, Object> deleteUser(List<Long> user_ids);
+    // 踢出系统用户
+    Map<String, Object> kickUser(Long user_id);
 
 }

+ 33 - 0
src/main/java/com/backendsys/modules/system/service/impl/SysUserV2ServiceImpl.java

@@ -1,5 +1,7 @@
 package com.backendsys.modules.system.service.impl;
 
+import cn.hutool.core.convert.Convert;
+import cn.hutool.core.util.StrUtil;
 import com.backendsys.exception.CustException;
 import com.backendsys.modules.common.config.redis.utils.RedisUtil;
 import com.backendsys.modules.common.utils.MybatisUtil;
@@ -11,7 +13,11 @@ import com.backendsys.utils.response.PageInfoResult;
 import com.backendsys.utils.response.Result;
 import com.backendsys.utils.response.ResultEnum;
 import com.backendsys.utils.v2.PageUtils;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
@@ -225,4 +231,31 @@ public class SysUserV2ServiceImpl extends ServiceImpl<SysUserDao, SysUser> imple
         } catch (InterruptedException e) { throw new RuntimeException(e);
         } finally { lock.unlock(); }
     }
+
+    /**
+     * 踢出系统用户
+     */
+    @Override
+    public Map<String, Object> kickUser(Long user_id) {
+        RLock lock = redissonClient.getLock("kickUser");
+        try { lock.tryLock(3, TimeUnit.SECONDS);
+
+            // 查询用户信息
+            Wrapper queryWrapper = new QueryWrapper<SysUserInfo>().lambda().eq(SysUserInfo::getUser_id, user_id);
+            SysUserInfo sysUserInfo = sysUserInfoDao.selectOne(queryWrapper);
+
+            if (sysUserInfo != null) {
+                // 清除缓存
+                String last_login_uuid = Convert.toStr(sysUserInfo.getLast_login_uuid());
+                if (StrUtil.isNotEmpty(last_login_uuid)) redisUtil.delete("token:id:" + last_login_uuid);
+                // 更新用户信息 (查询最后登录uuid,并清除)
+                Wrapper updateWrapper = new UpdateWrapper<SysUserInfo>().lambda().set(SysUserInfo::getLast_login_uuid, "").eq(SysUserInfo::getUser_id, user_id);
+                sysUserInfoDao.update(null, updateWrapper);
+            }
+
+            return Map.of("user_id", user_id);
+
+        } catch (InterruptedException e) { throw new RuntimeException(e);
+        } finally { lock.unlock(); }
+    }
 }