harmadik gyakorlat
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
/**
|
||||
* 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'
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user