feat: [approval] 결재관리 삭제 권한 기능 추가
- 관리자/슈퍼관리자 모든 상태 결재 문서 삭제 가능 - 일반 사용자는 기존대로 draft + 본인 기안만 삭제 - 진행 중 문서 삭제 시 휴가 연동 취소 처리 - 삭제 API 403 권한 검증 추가 - 상세 페이지 삭제 버튼 + 2중 확인 다이얼로그
This commit is contained in:
@@ -175,18 +175,24 @@ public function updateApproval(int $id, array $data): Approval
|
||||
}
|
||||
|
||||
/**
|
||||
* 삭제 (draft만)
|
||||
* 삭제 (일반: draft만 / 관리자: 모든 상태)
|
||||
*/
|
||||
public function deleteApproval(int $id): bool
|
||||
public function deleteApproval(int $id, ?User $user = null): bool
|
||||
{
|
||||
$approval = Approval::findOrFail($id);
|
||||
$approval = Approval::with('form')->findOrFail($id);
|
||||
$user = $user ?? auth()->user();
|
||||
|
||||
if (! $approval->isDeletable()) {
|
||||
throw new \InvalidArgumentException('삭제할 수 없는 상태입니다.');
|
||||
if (! $approval->isDeletableBy($user)) {
|
||||
throw new \InvalidArgumentException('삭제 권한이 없습니다.');
|
||||
}
|
||||
|
||||
// 진행 중/보류 문서 삭제 시 연동 후처리 (휴가 등)
|
||||
if (in_array($approval->status, [Approval::STATUS_PENDING, Approval::STATUS_ON_HOLD])) {
|
||||
$this->handleApprovalDeleted($approval);
|
||||
}
|
||||
|
||||
$approval->steps()->delete();
|
||||
$approval->update(['deleted_by' => auth()->id()]);
|
||||
$approval->update(['deleted_by' => $user->id]);
|
||||
|
||||
return $approval->delete();
|
||||
}
|
||||
@@ -738,6 +744,24 @@ private function handleApprovalRejected(Approval $approval, string $comment): vo
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 결재 삭제 시 연동 처리 (휴가 등)
|
||||
*/
|
||||
private function handleApprovalDeleted(Approval $approval): void
|
||||
{
|
||||
if (! $approval->form || $approval->form->code !== 'leave') {
|
||||
return;
|
||||
}
|
||||
|
||||
$leave = \App\Models\HR\Leave::where('approval_id', $approval->id)->first();
|
||||
if ($leave && in_array($leave->status, ['pending', 'approved'])) {
|
||||
$leave->update([
|
||||
'status' => 'cancelled',
|
||||
'updated_by' => auth()->id(),
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 결재 회수 시 연동 처리 (휴가 등)
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user