duckil_plm/fems-api/src/middleware/auth.middleware.js

65 lines
1.6 KiB
JavaScript
Raw Normal View History

2024-11-02 02:05:37 +09:00
// src/middleware/auth.middleware.js
2024-11-09 06:22:41 +09:00
const jwt = require("jsonwebtoken");
const config = require("../config/config");
2024-11-09 08:58:47 +09:00
const { User, Role } = require("../models");
2024-11-02 02:05:37 +09:00
const authMiddleware = async (req, res, next) => {
try {
2024-11-09 08:58:47 +09:00
const authHeader = req.headers.authorization;
if (!authHeader || !authHeader.startsWith("Bearer ")) {
return res
.status(401)
.json({ message: "Authentication token is required" });
2024-11-02 02:05:37 +09:00
}
2024-11-09 08:58:47 +09:00
const token = authHeader.split(" ")[1];
const decoded = jwt.verify(token, config.jwt.secret);
2024-11-02 02:05:37 +09:00
2024-11-09 08:58:47 +09:00
const user = await User.findOne({
where: { id: decoded.id },
2024-11-09 06:22:41 +09:00
include: [
{
model: Role,
2024-11-09 08:58:47 +09:00
through: { attributes: [] },
attributes: ["id", "name", "permissions"],
required: false,
2024-11-09 06:22:41 +09:00
},
],
2024-11-09 08:58:47 +09:00
attributes: {
exclude: ["password"],
},
2024-11-09 06:22:41 +09:00
});
2024-11-09 08:58:47 +09:00
if (!user || !user.isActive) {
return res.status(401).json({ message: "User not found or inactive" });
}
2024-11-09 06:22:41 +09:00
2024-11-09 08:58:47 +09:00
// 권한 정보 처리
const permissions = {
"basic:view": true, // 기본 권한
};
if (user.Roles) {
user.Roles.forEach((role) => {
if (role.permissions) {
Object.entries(role.permissions).forEach(([key, value]) => {
permissions[key] = permissions[key] || value;
});
}
});
}
2024-11-09 06:22:41 +09:00
2024-11-09 08:58:47 +09:00
// user 객체에서 Roles 제거하고 permissions 추가
const userData = user.toJSON();
delete userData.Roles;
userData.permissions = permissions;
2024-11-09 06:22:41 +09:00
2024-11-09 08:58:47 +09:00
req.user = userData;
next();
} catch (error) {
return res.status(401).json({ message: "Invalid token" });
2024-11-09 06:22:41 +09:00
}
};
2024-11-09 08:58:47 +09:00
module.exports = authMiddleware;