feat: v2.2.0 - 중복 카드 문제 해결 및 삭제 기능 개선
### 주요 변경사항 1. 작업 현황 모달 중복 카드 문제 근본 해결 - monthlyStatusModel.getDailyWorkerStatus() 리팩토링 - 집계 테이블 대신 daily_work_reports에서 직접 조회 - GROUP BY로 작업자별 1개 카드 보장 2. 삭제 권한 강화 - 작업보고서 삭제는 그룹장/시스템/관리자만 가능 - 권한 없는 사용자는 403 에러 반환 3. 작업 입력 UI 개선 - 작업 항목 삭제 버튼 스타일 개선 (이모지 + 빨간색) - 삭제 버튼 호버 효과 추가 4. 작업 현황 모달에 삭제 기능 추가 - 관리자/그룹장만 삭제 버튼 표시 - 작업자의 해당 날짜 전체 작업 삭제 가능 5. 시놀로지 배포 스크립트 추가 - update.sh: DB 보존하면서 코드만 업데이트 - 안전한 배포 절차 자동화
This commit is contained in:
@@ -368,17 +368,28 @@ const updateWorkReport = async (req, res) => {
|
||||
|
||||
/**
|
||||
* 🗑️ 특정 작업보고서 삭제 (V2 - Service Layer 사용)
|
||||
* 권한: 그룹장(group_leader), 시스템(system), 관리자(admin)만 가능
|
||||
*/
|
||||
const removeDailyWorkReport = async (req, res) => {
|
||||
try {
|
||||
const { id: reportId } = req.params;
|
||||
const userInfo = {
|
||||
user_id: req.user?.user_id || req.user?.id,
|
||||
access_level: req.user?.access_level || req.user?.role,
|
||||
};
|
||||
|
||||
if (!userInfo.user_id) {
|
||||
return res.status(401).json({ error: '사용자 인증 정보가 없습니다.' });
|
||||
}
|
||||
|
||||
// 권한 체크: 그룹장, 시스템, 관리자만 삭제 가능
|
||||
const allowedRoles = ['admin', 'system', 'group_leader'];
|
||||
if (!allowedRoles.includes(userInfo.access_level)) {
|
||||
return res.status(403).json({
|
||||
error: '작업보고서 삭제 권한이 없습니다.',
|
||||
details: '그룹장 이상의 권한이 필요합니다.'
|
||||
});
|
||||
}
|
||||
|
||||
const result = await dailyWorkReportService.removeDailyWorkReportService(reportId, userInfo);
|
||||
|
||||
@@ -405,6 +416,7 @@ const removeDailyWorkReport = async (req, res) => {
|
||||
const removeDailyWorkReportByDateAndWorker = (req, res) => {
|
||||
const { date, worker_id } = req.params;
|
||||
const deleted_by = req.user?.user_id || req.user?.id;
|
||||
const access_level = req.user?.access_level || req.user?.role;
|
||||
|
||||
if (!deleted_by) {
|
||||
return res.status(401).json({
|
||||
@@ -412,6 +424,15 @@ const removeDailyWorkReportByDateAndWorker = (req, res) => {
|
||||
});
|
||||
}
|
||||
|
||||
// 권한 체크: 그룹장, 시스템, 관리자만 삭제 가능
|
||||
const allowedRoles = ['admin', 'system', 'group_leader'];
|
||||
if (!allowedRoles.includes(access_level)) {
|
||||
return res.status(403).json({
|
||||
error: '작업보고서 삭제 권한이 없습니다.',
|
||||
details: '그룹장 이상의 권한이 필요합니다.'
|
||||
});
|
||||
}
|
||||
|
||||
console.log(`🗑️ 날짜+작업자별 전체 삭제 요청: date=${date}, worker_id=${worker_id}, 삭제자=${deleted_by}`);
|
||||
|
||||
dailyWorkReportModel.removeByDateAndWorker(date, worker_id, deleted_by, (err, affectedRows) => {
|
||||
|
||||
Reference in New Issue
Block a user