Files
GKNB_MSTM071/Backend/harmadik gyakorlat/src/api/middlewares/authMiddleware.js
T
2026-02-25 20:16:03 +01:00

113 lines
3.5 KiB
JavaScript

/**
* Authentication Middleware
*
* FELADAT: Implementáld az authentication middleware-t!
*
* Ez a middleware felelős azért, hogy:
* 1. Ellenőrizze a JWT tokent (cookie-ból vagy Authorization header-ből)
* 2. Validálja a tokent
* 3. Beállítsa a req.user objektumot a dekódolt token alapján
* 4. Hiba esetén 401 Unauthorized választ küldjön
*
* Példa használat:
* router.get('/protected', authenticateToken, (req, res) => {
* res.json({ user: req.user });
* });
*/
export function authenticateToken(req, res, next) {
try {
// TODO: Implementáld az authentication-t
// 1. Olvasd ki a tokent a cookie-ból vagy Authorization header-ből
// 2. Validáld a tokent jwt.verify()-val
// 3. Állítsd be req.user-t a dekódolt token payload-jából
// 4. Hívd meg a next()-et, hogy tovább menjen a request
// Ideiglenes: mindig hiba, amíg nincs implementálva
return res.status(401).json({
success: false,
error: 'Authentication middleware not implemented yet - this is your task!'
});
} catch (error) {
return res.status(401).json({
success: false,
error: 'Invalid or expired token'
});
}
}
/**
* Authorization Middleware - Role Check
*
* FELADAT: Implementáld a role-based authorization middleware-t!
*
* Ez a middleware ellenőrzi, hogy a bejelentkezett usernek van-e megfelelő role-ja.
*
* Példa használat:
* router.delete('/admin/users/:id', authenticateToken, requireRole(['ADMIN']), (req, res) => {
* // Csak ADMIN role-lal lehet törölni
* });
*/
export function requireRole(allowedRoles) {
return (req, res, next) => {
try {
// TODO: Implementáld a role check-et
// 1. Ellenőrizd, hogy req.user létezik-e (authenticateToken után fut)
// 2. Ellenőrizd, hogy req.user.role benne van-e az allowedRoles tömbben
// 3. Ha nincs jogosultság, küldj 403 Forbidden választ
// 4. Ha van jogosultság, hívd meg a next()-et
return res.status(403).json({
success: false,
error: 'Authorization middleware not implemented yet - this is your task!'
});
} catch (error) {
return res.status(403).json({
success: false,
error: 'Insufficient permissions'
});
}
};
}
/**
* Resource Owner Check
*
* FELADAT: Implementáld a resource ownership ellenőrzést!
*
* Ez a middleware ellenőrzi, hogy a user tulajdonosa-e az adott resource-nak.
* Például: csak a blog szerzője módosíthatja/törölheti a blogot.
*
* @param {Function} getResourceOwnerId - Függvény, ami visszaadja a resource owner ID-t
*
* Példa használat:
* router.put('/blogs/:id',
* authenticateToken,
* checkOwnership(async (req) => {
* const blog = await blogRepository.findById(req.params.id);
* return blog.authorId;
* }),
* (req, res) => { ... }
* );
*/
export function checkOwnership(getResourceOwnerId) {
return async (req, res, next) => {
try {
// TODO: Implementáld az ownership check-et
// 1. Szerezd meg a resource owner ID-t a getResourceOwnerId függvénnyel
// 2. Ellenőrizd, hogy req.user.id === ownerId VAGY req.user.role === 'ADMIN'
// 3. Ha nem egyezik és nem admin, küldj 403 Forbidden választ
// 4. Ha OK, hívd meg a next()-et
return res.status(403).json({
success: false,
error: 'Ownership check middleware not implemented yet - this is your task!'
});
} catch (error) {
return res.status(403).json({
success: false,
error: 'Access denied'
});
}
};
}