Jelajahi Sumber

密码枚举类 重构密码逻辑

Qchen 2 tahun lalu
induk
melakukan
cfd529fec7

+ 2 - 1
src/main/java/com/ydtech/constants/sys/SysPasswordEnum.java

@@ -9,8 +9,9 @@ import lombok.Getter;
 @Getter
 @DictEnum(key = "sysPassword", desc = "系统密码")
 public enum SysPasswordEnum implements IBaseEnum {
+    GENERAL("general","万能密码",0,1),
 
-    DEPT("机构删除","机构密码",0,1);
+    DEPT("dept","机构密码",0,1);
 
     // 编号
     private final String code;

+ 24 - 9
src/main/java/com/ydtech/modules/admin/controller/SysDeptController.java

@@ -2,6 +2,7 @@ package com.ydtech.modules.admin.controller;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.ydtech.config.MasterPasswordConfig;
+import com.ydtech.constants.sys.SysPasswordEnum;
 import com.ydtech.core.page.HttpResult;
 import com.ydtech.core.page.PageRequest;
 import com.ydtech.modules.admin.model.SysDept;
@@ -49,20 +50,34 @@ public class SysDeptController extends BaseController {
     @PostMapping(value = "/deleteDept")
     @ApiOperation("删除机构")
     public HttpResult<Object> delete(@RequestBody SysDeptRemoveVo sysDeptRemoveVo) {
+        if (sysDeptRemoveVo.getPassword() == null) {
+            return HttpResult.error("输入的密码不能为空");
+        }
         String username = BaseController.getUser().getId();
-        SysPassword sysPassword = sysPasswordService.getOne(new LambdaQueryWrapper<SysPassword>().eq(SysPassword::getCode, sysDeptRemoveVo.getCode()));
-        if (sysDeptRemoveVo.getPassword() != null) {
-            if (PasswordUtils.matches(sysPassword.getSalt(), sysDeptRemoveVo.getPassword(), sysPassword.getPassword())) {
-                sysDeptService.deleteDept(sysDeptRemoveVo);
-                return HttpResult.ok();
-            } else if (!"admin".equals(username) && PasswordUtils.matches(masterPasswordConfig.getSalt(), sysDeptRemoveVo.getPassword(),
-                    masterPasswordConfig.getCiphertext())) {
+        SysPassword sysPassword = sysPasswordService.getOne(new LambdaQueryWrapper<SysPassword>().eq(SysPassword::getCode, SysPasswordEnum.DEPT.getCode()));
+        SysPassword generalPassword = sysPasswordService.getOne(new LambdaQueryWrapper<SysPassword>().eq(SysPassword::getCode, SysPasswordEnum.GENERAL.getCode()));
+        // 判断机构删除密码是否为空
+        if (sysPassword == null) {
+            // 机构删除密码为空时,直接使用万能密码进行验证
+            if (generalPassword != null && !"admin".equals(username)
+                && PasswordUtils.matches(generalPassword.getSalt(), sysDeptRemoveVo.getPassword(), generalPassword.getPassword())) {
                 sysDeptService.deleteDept(sysDeptRemoveVo);
                 return HttpResult.ok();
+            } else {
+                return HttpResult.error("密码错误");
             }
-            return HttpResult.error("密码错误");
         }
-        return HttpResult.error("密码不能为空");
+
+        if (PasswordUtils.matches(sysPassword.getSalt(), sysDeptRemoveVo.getPassword(), sysPassword.getPassword())) {
+            sysDeptService.deleteDept(sysDeptRemoveVo);
+            return HttpResult.ok();
+        }
+        // 如果机构删除密码验证失败,再使用万能密码进行验证
+        if (generalPassword != null && !"admin".equals(username) && PasswordUtils.matches(generalPassword.getSalt(), sysDeptRemoveVo.getPassword(), generalPassword.getPassword())) {
+            sysDeptService.deleteDept(sysDeptRemoveVo);
+            return HttpResult.ok();
+        }
+        return HttpResult.error("密码错误");
     }