const jwt = require("jsonwebtoken"); const bcrypt = require("bcryptjs"); const pool = require("../db"); // Stelle sicher, dass der DB-Pool importiert wird // Authentifizierungs-Middleware const requireAuth = (req, res, next) => { const token = req.headers.authorization?.split(" ")[1]; if (!token) { return res.status(401).json({ error: "Kein Token vorhanden" }); } try { // JWT entschlüsseln const decoded = jwt.verify(token, process.env.JWT_SECRET); req.user = decoded; // Benutzerinformationen im Request speichern next(); } catch (err) { return res.status(401).json({ error: "Ungültiges Token" }); } }; function requireRole(minRole) { return (req, res, next) => { const user = req.user; // Aus decoded JWT const abteilung = req.abteilung; if (!user || !user.roles || !abteilung) { return res .status(403) .json({ error: "Keine Berechtigung (keine Abteilung gesetzt)" }); } const role = user.roles[abteilung]; if (!role) { return res .status(403) .json({ error: "Keine Rechte für diese Abteilung" }); } console.log(role); console.log(minRole); console.log(role <= minRole); if (role > minRole) { // z.B. 1: Admin, 2: ÜL, etc. return res.status(403).json({ error: "Nicht genügend Rechte" }); } next(); }; } const requireAdmin = async (req, res, next) => { try { const result = await pool.query("SELECT role FROM users WHERE id = $1", [ req.user.id, ]); if (result.rows.length === 0 || result.rows[0].role !== "admin") { return res.status(403).json({ error: "Nicht autorisiert" }); } next(); } catch (err) { console.error(err); return res.status(500).json({ error: "Interner Serverfehler" }); } }; module.exports = { requireAuth, requireRole, requireAdmin };