plplpl183's picture
Upload apps/api/src/modules/auth/middleware.ts
e9999a6 verified
import { Request, Response, NextFunction } from 'express';
import jwt from 'jsonwebtoken';
import { config } from '../../config';
export interface AuthRequest extends Request {
user?: { id: string; email: string; orgId: string; role: string };
}
export function requireAuth(req: AuthRequest, res: Response, next: NextFunction) {
const authHeader = req.headers.authorization;
if (!authHeader?.startsWith('Bearer ')) {
return res.status(401).json({ error: { message: 'Missing token', code: 'UNAUTHORIZED' } });
}
const token = authHeader.slice(7);
try {
const payload = jwt.verify(token, config.JWT_SECRET) as any;
req.user = payload;
next();
} catch {
return res.status(401).json({ error: { message: 'Invalid token', code: 'UNAUTHORIZED' } });
}
}
export function requireRole(...roles: string[]) {
return (req: AuthRequest, res: Response, next: NextFunction) => {
if (!req.user || !roles.includes(req.user.role)) {
return res.status(403).json({ error: { message: 'Insufficient permissions', code: 'FORBIDDEN' } });
}
next();
};
}