- monthly_worker_status 조회 시 GROUP BY로 중복 데이터 합산 - 작업보고서 삭제 권한을 그룹장 이상으로 제한 (admin, system, group_leader) - 중복 데이터 정리를 위한 마이그레이션 SQL 추가 (009_fix_duplicate_monthly_status.sql) - synology_deployment 버전에도 동일 수정 적용
89 lines
2.3 KiB
JavaScript
89 lines
2.3 KiB
JavaScript
const jwt = require('jsonwebtoken');
|
|
|
|
exports.verifyToken = (req, res, next) => {
|
|
try {
|
|
const authHeader = req.headers['authorization'];
|
|
if (!authHeader) {
|
|
return res.status(401).json({ error: '토큰 없음' });
|
|
}
|
|
|
|
const token = authHeader.split(' ')[1];
|
|
if (!token) {
|
|
return res.status(401).json({ error: '토큰 누락' });
|
|
}
|
|
|
|
const decoded = jwt.verify(token, process.env.JWT_SECRET);
|
|
req.user = decoded;
|
|
next(); // ✅ 반드시 next 호출
|
|
} catch (err) {
|
|
console.error('[verifyToken 오류]', err.message);
|
|
return res.status(403).json({ error: '토큰 검증 실패', detail: err.message });
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Admin 등급 이상 권한 체크 미들웨어
|
|
*/
|
|
exports.requireAdmin = (req, res, next) => {
|
|
try {
|
|
if (!req.user) {
|
|
return res.status(401).json({
|
|
error: '인증 필요',
|
|
message: '먼저 로그인해주세요.'
|
|
});
|
|
}
|
|
|
|
const userRole = req.user.role;
|
|
const adminRoles = ['admin', 'system'];
|
|
|
|
if (!adminRoles.includes(userRole)) {
|
|
return res.status(403).json({
|
|
error: '권한 부족',
|
|
message: '관리자 권한이 필요합니다.',
|
|
required: 'admin 또는 system',
|
|
current: userRole
|
|
});
|
|
}
|
|
|
|
console.log(`✅ Admin 권한 확인: ${req.user.username} (${userRole})`);
|
|
next();
|
|
} catch (err) {
|
|
console.error('[requireAdmin 오류]', err.message);
|
|
return res.status(500).json({
|
|
error: '권한 확인 중 오류 발생',
|
|
detail: err.message
|
|
});
|
|
}
|
|
};
|
|
|
|
/**
|
|
* System 등급 권한 체크 미들웨어
|
|
*/
|
|
exports.requireSystem = (req, res, next) => {
|
|
try {
|
|
if (!req.user) {
|
|
return res.status(401).json({
|
|
error: '인증 필요',
|
|
message: '먼저 로그인해주세요.'
|
|
});
|
|
}
|
|
|
|
if (req.user.role !== 'system') {
|
|
return res.status(403).json({
|
|
error: '권한 부족',
|
|
message: '시스템 관리자 권한이 필요합니다.',
|
|
required: 'system',
|
|
current: req.user.role
|
|
});
|
|
}
|
|
|
|
console.log(`✅ System 권한 확인: ${req.user.username}`);
|
|
next();
|
|
} catch (err) {
|
|
console.error('[requireSystem 오류]', err.message);
|
|
return res.status(500).json({
|
|
error: '권한 확인 중 오류 발생',
|
|
detail: err.message
|
|
});
|
|
}
|
|
}; |