{"record":{"id":"2d5bf5e8ec8706fb","repo":"jeecgboot/JeecgBoot","slug":"error-2d5bf5","errorCode":null,"errorMessage":"用户不是今天创建的，无法删除！","messagePattern":"用户不是今天创建的，无法删除！","errorType":"exception","errorClass":"JeecgBootException","httpStatus":null,"severity":"error","filePath":"jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysTenantServiceImpl.java","lineNumber":945,"sourceCode":"    }\n\n    /**\n     * 验证创建时间和密码\n     * \n     * @param sysUser\n     * @param password\n     */\n    private void verifyCreateTimeAndPassword(SysUser sysUser,String password) {\n        if(null == sysUser){\n            throw new JeecgBootException(\"该用户不存在，无法删除！\");\n        }\n        //step1 验证创建时间\n        //当前登录用户\n        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();\n        Date createTime = sysUser.getCreateTime();\n        boolean sameDay = DateUtils.isSameDay(createTime, new Date());\n        if(!sameDay){\n            throw new JeecgBootException(\"用户不是今天创建的，无法删除！\");\n        }\n        //step2 验证密码\n        //获取admin的用户\n        SysUser adminUser = userService.getById(user.getId());\n        String passwordEncode = PasswordUtil.encrypt(adminUser.getUsername(), password, adminUser.getSalt());\n        if(!passwordEncode.equals(adminUser.getPassword())){\n            throw new JeecgBootException(\"您输入的密码不正确，无法删除该用户！\");\n        }\n    }\n\n    @Override\n    public List<SysTenant> getTenantListByUserId(String userId) {\n        return tenantMapper.getTenantListByUserId(userId);\n    }\n\n    @Override\n    public void deleteUser(SysUser sysUser, Integer tenantId) {\n        //被删除人的用户id","sourceCodeStart":927,"sourceCodeEnd":963,"githubUrl":"https://github.com/jeecgboot/JeecgBoot/blob/96fb33f5ec68516da0b0147da06b2eb0419e063a/jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysTenantServiceImpl.java#L927-L963","documentation":"verifyCreateTimeAndPassword throws when the target user's createTime is not the same calendar day as today (DateUtils.isSameDay). Deletion is restricted to users created the same day — a safeguard allowing admins to immediately undo an erroneous same-day account creation, while preventing deletion of established accounts even by their creator.","triggerScenarios":"Attempting to delete a user whose sys_user.create_time falls on a previous day. Even if all other conditions (admin authority, resigned, no other orgs, is creator) pass, a non-today creation date blocks deletion.","commonSituations":"Trying to delete a user created days/weeks ago; timezone differences between the DB server and app server cause isSameDay to misjudge the day boundary; clock skew; the user was imported with a backdated create_time.","solutions":["Confirm deletion is intended for a same-day-created user; if the account is older, use the standard deactivation/disable flow instead.","Verify server and database timezones align so isSameDay evaluates the correct calendar day (especially around midnight).","If policy requires deleting an older account, escalate to a DB-level/logic-delete procedure with proper authorization.","For imported users with backdated create_time, adjust expectations — they will not pass the same-day gate."],"exampleFix":"// before\ntenantService.deleteUserByPassword(targetUser, tenantId);\n\n// after\nif (!DateUtils.isSameDay(targetUser.getCreateTime(), new Date())) {\n    return Result.error(\"仅可删除当日创建的用户；该用户创建于 \" + targetUser.getCreateTime() + \"，请改用禁用流程\");\n}\ntenantService.deleteUserByPassword(targetUser, tenantId);","handlingStrategy":"validation","validationCode":"if (!DateUtils.isSameDay(targetUser.getCreateTime(), new Date())) {\n    return Result.error(\"仅当日创建的用户可删除，该用户创建于 \" + targetUser.getCreateTime());\n}","typeGuard":null,"tryCatchPattern":"try {\n    tenantService.deleteUserByPassword(targetUser, tenantId);\n} catch (JeecgBootException e) {\n    if (e.getMessage().contains(\"今天创建\")) {\n        return Result.error(\"该用户非当日创建，请改用禁用流程\");\n    }\n    throw e;\n}","preventionTips":["Align server and DB timezones so isSameDay is accurate near midnight.","Use disable/deactivate for accounts older than one day.","Document the same-day rule for operators to set expectations."],"tags":["user-deletion","business-rule","time-based","jeecg-boot"],"backgroundTag":null,"analyzedSha":"96fb33f5ec68516da0b0147da06b2eb0419e063a","analyzedAt":"2026-08-14T00:04:16.786Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}