const jwt = require('jsonwebtoken'); const User = require('../models/User'); const ErrorResponse = require('../utils/errorResponse'); // Protect routes exports.protect = async (req, res, next) => { let token; if (req.cookies.token) { token = req.cookies.token; } if (!token) { return next(new ErrorResponse('Not authorized to access this route', 401)); } try { // Verify token const decoded = jwt.verify(token, process.env.JWT_SECRET); req.user = await User.findById(decoded.id); next(); } catch (err) { return next(new ErrorResponse('Not authorized to access this route', 401)); } }; // Grant access to specific roles exports.authorize = (...roles) => { return (req, res, next) => { if (!roles.includes(req.user.role)) { return next( new ErrorResponse( `User role ${req.user.role} is not authorized to access this route`, 403 ) ); } next(); }; };