- 삭제된 사용자/법인 포함 승인 요청 삭제 기능 추가
eapim-admin CI / build (push) Has been cancelled

- 삭제 버튼 관련 JSP/JS 수정 및 승인 상태별 버튼 표시 개선
- 초기 패스워드 설정 접미사 적용 및 강제 변경 유도 로직 추가
This commit is contained in:
Rinjae
2026-07-28 15:37:58 +09:00
parent 775d69eb53
commit 2d414dc31b
5 changed files with 166 additions and 46 deletions
@@ -86,6 +86,12 @@ public class PortalApprovalManController extends BaseAnnotationController {
return ResponseEntity.ok().build();
}
@PostMapping(value = "/onl/apim/approval/portalApprovalMan.json", params = "cmd=DELETE")
public ResponseEntity<Void> delete(String id) {
portalApprovalManService.deleteApprovalRequest(id);
return ResponseEntity.ok().build();
}
@PostMapping(value = "/onl/apim/approval/portalApprovalMan.json", params = "cmd=REDEPLOY")
public ResponseEntity<Void> redeploy(String id) {
portalApprovalManService.redeploy(id);
@@ -7,6 +7,8 @@ import com.eactive.apim.portal.approval.entity.Approval;
import com.eactive.apim.portal.approval.entity.ApprovalType;
import com.eactive.apim.portal.approval.entity.ApproverStatus;
import com.eactive.apim.portal.approval.statemachine.*;
import com.eactive.apim.portal.portalorg.entity.PortalOrg;
import com.eactive.apim.portal.portalorg.entity.PortalOrgEnums.OrgStatus;
import com.eactive.apim.portal.portalproperty.service.PortalPropertyService;
import com.eactive.apim.portal.portaluser.entity.PortalUser;
import com.eactive.apim.portal.portaluser.repository.PortalUserRepository;
@@ -432,6 +434,45 @@ public class PortalApprovalManService extends BaseService {
}
}
/**
* 삭제된 대상 사용자 또는 삭제된 법인이 포함되어 승인·반려가 불가능한 승인 요청을 물리 삭제한다.
* 사용자(PortalUser)/법인(PortalOrg) row 는 건드리지 않고 PTL_APPROVER/PTL_APPROVAL row 만 제거한다.
* 임의 삭제 방지를 위해 실제로 삭제된 사용자/법인이 포함된 USER 유형 요청만 허용한다.
*/
public void deleteApprovalRequest(String id) {
Approval approval = approvalService.findById(id)
.orElseThrow(() -> new BizException("승인 정보를 찾을 수 없습니다. ID: " + id));
if (!approval.getApprovalType().equals(ApprovalType.USER)) {
throw new BizException("법인사용자 승인 요청만 삭제할 수 있습니다.");
}
Optional<PortalUser> optUser = portalUserRepository.findById(approval.getTargetId());
boolean userDeleted = !optUser.isPresent()
|| "반려된 사용자".equals(optUser.get().getUserName())
|| "삭제된 사용자".equals(optUser.get().getUserName());
boolean orgDeleted = false;
if (optUser.isPresent()) {
PortalOrg org = optUser.get().getPortalOrg();
orgDeleted = org == null
|| OrgStatus.REMOVED.equals(org.getOrgStatus())
|| "삭제된법인".equals(org.getOrgName());
}
if (!(userDeleted || orgDeleted)) {
throw new BizException("삭제된 사용자 또는 법인이 포함된 요청만 삭제할 수 있습니다.");
}
entityManager.createNativeQuery("DELETE FROM PTL_APPROVER WHERE APPROVAL_ID = :id")
.setParameter("id", id)
.executeUpdate();
int affected = entityManager.createNativeQuery("DELETE FROM PTL_APPROVAL WHERE ID = :id")
.setParameter("id", id)
.executeUpdate();
if (affected == 0) {
throw new BizException("승인 정보를 찾을 수 없습니다. ID: " + id);
}
logger.info("Approval {} deleted (deleted target user/org present)", id);
}
public void sendEvent(String id, ApprovalEvent event, Map<String, Object> options) {
approvalService.findById(id).ifPresent(approval -> {
options.put("authorizer", portalApprovalAuthorizer);
@@ -190,7 +190,14 @@ public class PortalUserManService extends BaseService {
}
PortalUser portalUser = portalUserUIMapper.toEntity(portalUserUI);
portalUser.setPasswordHash(kjbSafedbPasswordEncoder.encode("!" + portalUserUI.getLoginId()));
// 최초 아이디 생성 시 초기 패스워드(loginId + subfix)로 세팅 (비밀번호 초기화와 동일)
String subfix = getPasswordInitSubfix();
portalUser.setPasswordHash(kjbSafedbPasswordEncoder.encode(portalUserUI.getLoginId() + subfix));
// 비밀번호 변경일 초기화 (초기 비밀번호 강제 변경 유도)
portalUser.setPasswordChangeDate(null);
portalUser.setLoginFailureCount(0);
portalUser.setAccountLockYn("N");
portalUser.setEmailAddr(portalUserUI.getLoginId());