| 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(); |
| }; |
| } |
|
|