Bladeren bron

新增重置密码

Mure 8 maanden geleden
bovenliggende
commit
c5eaab54af

+ 15 - 15
db/sys_user.sql

@@ -23,21 +23,21 @@ CREATE TABLE `sys_user` (
 
 INSERT INTO sys_user(username, phone, phone_area_code, password) VALUES
     ('admin', '13670511519', 86, '$2a$10$xITUWkoJydVbYzwh2nflmOWTTGFp0bByyFXnr2l5W1ZM080uPseEC'),
-    ('admintest', '', null, '$2a$10$lVO.VhDbyCKMsfajNQc6xO4aZsWMHu0p5YuVATNuAgLV8Pbjkv17W'),
-    ('admintest2', '', null, '$2a$10$Uo530feMzEZFIU9y40uiteN493JWtJQBVpLBRVWC4dg/Mv7eaUhMy'),
-    ('aaa', '', null, '123456'),
-    ('bbb', '', null, '123456'),
-    ('ccc', '', null, '123456'),
-    ('ddd', '', null, '123456'),
-    ('eee', '', null, '123456'),
-    ('fff', '', null, '123456'),
-    ('gkyaGYjs', '', null, '123456'),
-    ('hhh', '', null, '$2a$10$Uo530feMzEZFIU9y40uiteN493JWtJQBVpLBRVWC4dg/Mv7eaUhMy'),
-    ('iii', '', null, '$2a$10$Uo530feMzEZFIU9y40uiteN493JWtJQBVpLBRVWC4dg/Mv7eaUhMy'),
-    ('lulu', '', null, '$2a$10$Uo530feMzEZFIU9y40uiteN493JWtJQBVpLBRVWC4dg/Mv7eaUhMy'),
-    ('limeiying', '', null, '$2a$10$Uo530feMzEZFIU9y40uiteN493JWtJQBVpLBRVWC4dg/Mv7eaUhMy'),
-    ('chenjiayang', '', null, '$2a$10$Uo530feMzEZFIU9y40uiteN493JWtJQBVpLBRVWC4dg/Mv7eaUhMy'),
-    ('hongzexin','', null, '$2a$10$Uo530feMzEZFIU9y40uiteN493JWtJQBVpLBRVWC4dg/Mv7eaUhMy')
+    ('admintest', '13333330001', null, '$2a$10$lVO.VhDbyCKMsfajNQc6xO4aZsWMHu0p5YuVATNuAgLV8Pbjkv17W'),
+    ('admintest2', '13333330002', null, '$2a$10$Uo530feMzEZFIU9y40uiteN493JWtJQBVpLBRVWC4dg/Mv7eaUhMy'),
+    ('aaa', '13333330003', null, '123456'),
+    ('bbb', '13333330004', null, '123456'),
+    ('ccc', '13333330005', null, '123456'),
+    ('ddd', '13333330006', null, '123456'),
+    ('eee', '13333330007', null, '123456'),
+    ('fff', '13333330008', null, '123456'),
+    ('gkyaGYjs', '13333330009', null, '123456'),
+    ('hhh', '13333330010', null, '$2a$10$Uo530feMzEZFIU9y40uiteN493JWtJQBVpLBRVWC4dg/Mv7eaUhMy'),
+    ('iii', '13333330011', null, '$2a$10$Uo530feMzEZFIU9y40uiteN493JWtJQBVpLBRVWC4dg/Mv7eaUhMy'),
+    ('lulu', '13333330012', null, '$2a$10$Uo530feMzEZFIU9y40uiteN493JWtJQBVpLBRVWC4dg/Mv7eaUhMy'),
+    ('limeiying', '13333330013', null, '$2a$10$Uo530feMzEZFIU9y40uiteN493JWtJQBVpLBRVWC4dg/Mv7eaUhMy'),
+    ('chenjiayang', '13333330014', null, '$2a$10$Uo530feMzEZFIU9y40uiteN493JWtJQBVpLBRVWC4dg/Mv7eaUhMy'),
+    ('hongzexin','13333330015', null, '$2a$10$Uo530feMzEZFIU9y40uiteN493JWtJQBVpLBRVWC4dg/Mv7eaUhMy')
 ;
 
 

+ 18 - 20
db/sys_user_info.sql

@@ -13,14 +13,13 @@ CREATE TABLE `sys_user_info` (
     `user_id` BIGINT(10) NOT NULL COMMENT '系统用户ID',
     `nickname` VARCHAR(20) COMMENT '昵称',
     `email` VARCHAR(50) COMMENT '邮箱',
-    `phone` VARCHAR(20) COMMENT '手机号码',
     `gender` TINYINT(1) COMMENT '性别(1男, 2女, 3保密)',
     `avatar` VARCHAR(1000) COMMENT '头像',
     `last_login_uuid` VARCHAR(36) COMMENT '最后登录UUID',
     `last_login_ip` VARCHAR(20) COMMENT '最后登录IP',
     `last_login_time` DATETIME COMMENT '最后登录时间',
     `is_super` TINYINT(1) DEFAULT '-1' COMMENT '是否超级管理员 (-1否, 1是)',
-    `audit_status` TINYINT(1) DEFAULT '1' COMMENT '账号审核状态 (-1审核拒绝, 1待审核, 2审核通过)',
+    `audit_status` TINYINT(1) DEFAULT '2' COMMENT '账号审核状态 (-1审核拒绝, 1待审核, 2审核通过)',
     `audit_note` VARCHAR(255) COMMENT '账号审核备注',
     `point_balance` FLOAT DEFAULT 0 COMMENT '积分余额',
     `invite_code` VARCHAR(255) COMMENT '邀请码',
@@ -30,7 +29,6 @@ CREATE TABLE `sys_user_info` (
     `del_flag` TINYINT(1) DEFAULT '-1' COMMENT '删除标志 (-1未删除, 1删除)',
     UNIQUE KEY (`nickname`),
     INDEX `idx_nickname` (`nickname`),
-    INDEX `idx_phone` (`phone`),
     INDEX `idx_email` (`email`)
 ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='系统用户表';
 
@@ -56,21 +54,21 @@ CREATE TABLE `sys_user_info` (
 # FOREIGN KEY (`user_id`) REFERENCES `sys_user`(`id`) ON DELETE CASCADE
 
 
-INSERT INTO sys_user_info(user_id, nickname, email, phone, gender, is_super, audit_status, audit_note, status, avatar, invite_code, create_time) VALUES
-    (1, '超人', 'admin@qq.com', '13123412331', '1', '1', '2', '同意通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2023-07-19 10:45:00'),
-    (2, '测试账号', '1111@qq.com', '13333311111', '1', '1', '2', '同意通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2023-07-19 10:45:01'),
-    (3, '测试账号2', '2222@qq.com', '13333311112', '2', '1', '2', '同意通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2023-07-19 10:45:02'),
-    (4, 'aaa', 'aaa@qq.com', '13333311113', '2', '-1', '1', '', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2023-07-19 10:45:03'),
-    (5, 'bbb', 'bbb@qq.com', '13333311114', '2', '-1', '-1', '拒绝通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2023-07-19 10:45:04'),
-    (6, 'ccc', 'ccc@qq.com', '13333311115', '1', '-1', '-1', '拒绝通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2023-07-19 10:45:05'),
-    (7, 'ddd', 'ddd@qq.com', '13333311116', '1', '-1', '-1', '拒绝通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2023-07-19 10:45:06'),
-    (8, 'eee', 'eee@qq.com', '13333311117', '1', '-1', '-1', '拒绝通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2023-07-19 10:45:07'),
-    (9, 'fff', 'fff@qq.com', '13333311118', '1', '-1', '-1', '拒绝通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2023-07-19 10:45:08'),
-    (10, 'ggg', 'ggg@qq.com', '13333311119', '1', '-1', '-1', '拒绝通过备注', '-1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2023-07-19 10:45:09'),
-    (11, 'hhh', 'hhh@qq.com', '13333311120', '1', '-1', '1', '', '-1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2023-07-19 10:45:10'),
-    (12, 'iii', 'iii@qq.com', '13333311121', '1', '-1', '2', '同意通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2023-07-19 10:45:11'),
-    (13, 'Lu', 'lulu@qq.com', '13333333330', '1', '1', '2', '同意通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2024-03-06 15:14:11'),
-    (14, '李美莹', 'Suui_isoo@qq.com', '18688028666', '2', '1', '2', '同意通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2024-03-06 15:14:12'),
-    (15, '陈嘉阳', 'chak0804@qq.com', '13333333333', '1', '1', '2', '同意通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2024-03-06 15:14:13'),
-    (16, '洪泽鑫', 'zzzzexin@qq.com', '13333333334', '1', '1', '2', '同意通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2024-03-06 15:14:14')
+INSERT INTO sys_user_info(user_id, nickname, email, gender, is_super, audit_status, audit_note, status, avatar, invite_code, create_time) VALUES
+    (1, '超人', 'admin@qq.com', '1', '1', '2', '同意通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2023-07-19 10:45:00'),
+    (2, '测试账号', '1111@qq.com', '1', '1', '2', '同意通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2023-07-19 10:45:01'),
+    (3, '测试账号2', '2222@qq.com', '2', '1', '2', '同意通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2023-07-19 10:45:02'),
+    (4, 'aaa', 'aaa@qq.com', '2', '-1', '1', '', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2023-07-19 10:45:03'),
+    (5, 'bbb', 'bbb@qq.com', '2', '-1', '-1', '拒绝通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2023-07-19 10:45:04'),
+    (6, 'ccc', 'ccc@qq.com', '1', '-1', '-1', '拒绝通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2023-07-19 10:45:05'),
+    (7, 'ddd', 'ddd@qq.com', '1', '-1', '-1', '拒绝通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2023-07-19 10:45:06'),
+    (8, 'eee', 'eee@qq.com', '1', '-1', '-1', '拒绝通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2023-07-19 10:45:07'),
+    (9, 'fff', 'fff@qq.com', '1', '-1', '-1', '拒绝通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2023-07-19 10:45:08'),
+    (10, 'ggg', 'ggg@qq.com', '1', '-1', '-1', '拒绝通过备注', '-1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2023-07-19 10:45:09'),
+    (11, 'hhh', 'hhh@qq.com', '1', '-1', '1', '', '-1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2023-07-19 10:45:10'),
+    (12, 'iii', 'iii@qq.com', '1', '-1', '2', '同意通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2023-07-19 10:45:11'),
+    (13, 'Lu', 'lulu@qq.com', '1', '1', '2', '同意通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2024-03-06 15:14:11'),
+    (14, '李美莹', 'Suui_isoo@qq.com', '2', '1', '2', '同意通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2024-03-06 15:14:12'),
+    (15, '陈嘉阳', 'chak0804@qq.com', '1', '1', '2', '同意通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2024-03-06 15:14:13'),
+    (16, '洪泽鑫', 'zzzzexin@qq.com', '1', '1', '2', '同意通过备注', '1', null, '12c9dd17-b7f4-4483-a513-fbcc36512d8d', '2024-03-06 15:14:14')
 ;

+ 2 - 0
db/sys_user_role_module.sql

@@ -45,6 +45,8 @@ INSERT INTO sys_user_role_module(id, parent_id, module_name, sort) VALUES
             ('3.2.2', '3.2', '系统用户-创建', null),
             ('3.2.3', '3.2', '系统用户-编辑', null),
                 ('3.2.3.2', '3.2', '系统用户-编辑他人信息', null),
+                ('3.2.3.3', '3.2', '系统用户-编辑密码', null),
+                ('3.2.3.4', '3.2', '系统用户-重置密码', null),
             ('3.2.4', '3.2', '系统用户-删除', null),
             ('3.2.5', '3.2', '系统用户-删除(批量)', null),
             ('3.2.6', '3.2', '系统用户-审核', null),

+ 4 - 1
db/sys_user_role_module_relation.sql

@@ -47,7 +47,10 @@ INSERT INTO sys_user_role_module_relation(role_id, module_id) VALUES
     (1, '3'),
         (1, '3.1'),
         (1, '3.2'),
-            (1, '3.2.1'), (1, '3.2.1.2'), (1, '3.2.2'), (1, '3.2.3'), (1, '3.2.3.2'), (1, '3.2.4'), (1, '3.2.5'), (1, '3.2.6'), (1, '3.2.7'),
+            (1, '3.2.1'), (1, '3.2.1.2'), (1, '3.2.2'),
+            (1, '3.2.3'),
+                (1, '3.2.3.2'), (1, '3.2.3.3'), (1, '3.2.3.4'),
+            (1, '3.2.4'), (1, '3.2.5'), (1, '3.2.6'), (1, '3.2.7'),
         (1, '3.3'),
             (1, '3.3.8'), (1, '3.3.9'), (1, '3.3.10'),
 #             (1, '3.3.1'), (1, '3.3.2'), (1, '3.3.3'), (1, '3.3.4'), (1, '3.3.5'), (1, '3.3.6'), (1, '3.3.7'),

+ 1 - 1
src/main/java/com/backendsys/controller/Systems/SysAuthController.java

@@ -76,7 +76,7 @@ public class SysAuthController {
     }
 
     /**
-     * 忘记密码/重置密码
+     * 忘记密码
      */
     @PostMapping("/api/public/system/user/forgotPassword")
     public Result forgotPassword(@Validated(SysUserDTO.ForgotPassword.class) @RequestBody SysUserDTO sysUserDTO) {

+ 22 - 1
src/main/java/com/backendsys/modules/system/controller/SysUserController.java

@@ -132,7 +132,7 @@ public class SysUserController {
      * 权限:(同上)
      */
     @Operation(summary = "编辑系统用户密码")
-    @PreAuthorize("@ss.hasPermi('3.2.3')")
+    @PreAuthorize("@ss.hasPermi('3.2.3.3')")
     @PutMapping("/api/system/user/updateUserPassword")
     public Result updateUserPassword(@Validated(SysUserDTO.UpdatePassword.class) @RequestBody SysUserDTO sysUserDTO) {
 
@@ -154,6 +154,27 @@ public class SysUserController {
         return Result.success().put("data", sysUserV2Service.updateUserPassword(sysUserDTO));
     }
 
+    @Operation(summary = "重置系统用户密码")
+    @PreAuthorize("@ss.hasPermi('3.2.3.4')")
+    @PutMapping("/api/system/user/resetUserPassword")
+    public Result resetUserPassword(@Validated(SysUserDTO.ResetPassword.class) @RequestBody SysUserDTO sysUserDTO) {
+
+        // 判断不可为超级管理员(首位)
+        Long user_id = sysUserDTO.getUser_id();
+        if (user_id.equals(1L)) {
+            throw new CustException("不能重置超管账号密码");
+        }
+
+        // 判断是否为自身重置,自身密码不能重置,只能修改
+        Long self_user_id = SecurityUtil.getUserId();
+        Long request_user_id = sysUserDTO.getUser_id();
+        if (self_user_id.equals(request_user_id)) {
+            throw new CustException("不能重置自身密码,请自行修改密码");
+        }
+
+        return Result.success().put("data", sysUserV2Service.resetUserPassword(sysUserDTO));
+    }
+
     @Operation(summary = "删除系统用户")
     @PreAuthorize("@ss.hasPermi('3.2.4')")
     @DeleteMapping("/api/system/user/deleteUser")

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

@@ -18,6 +18,7 @@ public class SysUserDTO {
   public static interface Register{}
   public static interface Update{}
   public static interface UpdatePassword{}
+  public static interface ResetPassword{}
   public static interface Audit{}
   public static interface Delete{}
   public static interface Kick{}
@@ -40,7 +41,7 @@ public class SysUserDTO {
   /**
    * sys_user_info
    */
-  @NotNull(message="user_id 不能为空", groups = { Detail.class, Kick.class, Audit.class })
+  @NotNull(message="user_id 不能为空", groups = { ResetPassword.class, Detail.class, Kick.class, Audit.class })
   private Long user_id;
   private List<Long> user_ids;
 
@@ -53,7 +54,7 @@ public class SysUserDTO {
   @Email(message="邮箱格式不正确", groups = { Create.class, Update.class })
   private String email;
 
-  @NotEmpty(message="手机号码不能为空", groups = { Create.class, Register.class, LoginWithPhone.class, ForgotPassword.class })
+  @NotEmpty(message="手机号码不能为空", groups = { Register.class, LoginWithPhone.class, ForgotPassword.class })
   @Phone(message="手机号码格式不正确", groups = { Create.class, Update.class, LoginWithPhone.class, ForgotPassword.class })
   @Size(min = 9, max = 20, message = "手机号码长度在 {min}-{max} 字符", groups = { Create.class, Update.class, LoginWithPhone.class, ForgotPassword.class })
   private String phone;

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

@@ -25,6 +25,8 @@ public interface SysUserV2Service extends IService<SysUser> {
     Map<String, Object> updateUserInfo(SysUserDTO sysUserDTO);
     // 编辑系统用户密码
     Map<String, Object> updateUserPassword(SysUserDTO sysUserDTO);
+    // 重置系统用户密码
+    Map<String, Object> resetUserPassword(SysUserDTO sysUserDTO);
     // 删除系统用户
     Map<String, Object> deleteUser(SysUserDTO sysUserDTO);
     // 踢出系统用户

+ 50 - 3
src/main/java/com/backendsys/modules/system/service/impl/SysUserV2ServiceImpl.java

@@ -11,6 +11,7 @@ import com.backendsys.modules.system.entity.SysUserDTO;
 import com.backendsys.modules.system.entity.SysUserInfo;
 import com.backendsys.modules.system.entity.SysUserRoleRelation;
 import com.backendsys.modules.system.service.SysUserV2Service;
+import com.backendsys.utils.MD5Util;
 import com.backendsys.utils.response.PageEntity;
 import com.backendsys.utils.response.PageInfoResult;
 import com.backendsys.utils.v2.PageUtils;
@@ -28,6 +29,7 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.security.NoSuchAlgorithmException;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -212,19 +214,64 @@ public class SysUserV2ServiceImpl extends ServiceImpl<SysUserDao, SysUser> imple
                 throw new CustException("原密码不正确");
             }
 
-            // 密码二次加密
             SysUser entity = new SysUser();
             entity.setId(sysUserDTO.getUser_id());
-            entity.setPassword(encoder.encode(sysUserDTO.getPassword()));
+            // MD5加密
+            String md5Password = MD5Util.encrypt(sysUserDTO.getPassword());
+            // 加盐加密
+            String encodedPassword = encoder.encode(md5Password);
+            entity.setPassword(encodedPassword);
+            //
             System.out.println(entity);
             sysUserDao.updateById(entity);
 
             return Map.of("user_id", sysUserDTO.getUser_id());
 
-        } catch (InterruptedException e) { throw new RuntimeException(e);
+        } catch (InterruptedException e) {
+            throw new RuntimeException(e);
+        } catch (NoSuchAlgorithmException e) {
+            throw new RuntimeException(e);
+        } finally { lock.unlock(); }
+    }
+
+    /**
+     * 重置系统用户密码
+     */
+    @Override
+    @Transactional
+    public Map<String, Object> resetUserPassword(SysUserDTO sysUserDTO) {
+        RLock lock = redissonClient.getLock("resetUserPassword");
+        try { lock.tryLock(3, TimeUnit.SECONDS);
+
+            // 生成一个六位的随机数密码
+            String uuid = UUID.randomUUID().toString().replace("-", "");
+            String password = uuid.substring(0, 6);
+            // MD5加密
+            String md5Password = MD5Util.encrypt(password);
+            // 加盐加密
+            BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
+            String encodedPassword = encoder.encode(md5Password);
+            sysUserDTO.setPassword(encodedPassword);
+            //
+            SysUser entity = new SysUser();
+            entity.setId(sysUserDTO.getUser_id());
+            entity.setPassword(encodedPassword);
+            System.out.println(entity);
+            sysUserDao.updateById(entity);
+
+            Map<String, Object> response = new LinkedHashMap<>();
+            response.put("user_id", sysUserDTO.getUser_id());
+            response.put("plain_password", password);
+            return response;
+
+        } catch (InterruptedException e) {
+            throw new RuntimeException(e);
+        } catch (NoSuchAlgorithmException e) {
+            throw new RuntimeException(e);
         } finally { lock.unlock(); }
     }
 
+
     /**
      * 删除系统用户 (以及部分关联表)
      */

+ 1 - 1
src/main/java/com/backendsys/service/System/SysAuthServiceImpl.java

@@ -390,7 +390,7 @@ public class SysAuthServiceImpl implements SysAuthService {
     }
 
     /**
-     * 忘记密码/重置密码
+     * 忘记密码
      */
     @Override
     @Transactional