65 lines
1.6 KiB
JavaScript
65 lines
1.6 KiB
JavaScript
function requireLogin(req, res, next) {
|
||
if (!req.session.user) {
|
||
return res.redirect("/");
|
||
}
|
||
|
||
req.user = req.session.user;
|
||
next();
|
||
}
|
||
|
||
// ── Hilfsfunktion: Zugriff verweigern mit Flash + Redirect ────────────────────
|
||
function denyAccess(req, res, message) {
|
||
// Zurück zur vorherigen Seite, oder zum Dashboard
|
||
const back = req.get("Referrer") || "/dashboard";
|
||
|
||
req.session.flash = req.session.flash || [];
|
||
req.session.flash.push({ type: "danger", message });
|
||
|
||
return res.redirect(back);
|
||
}
|
||
|
||
// ✅ Arzt-only
|
||
function requireArzt(req, res, next) {
|
||
if (!req.session.user) return res.redirect("/");
|
||
|
||
if (req.session.user.role !== "arzt") {
|
||
return denyAccess(req, res, "⛔ Kein Zugriff – diese Seite ist nur für Ärzte.");
|
||
}
|
||
|
||
req.user = req.session.user;
|
||
next();
|
||
}
|
||
|
||
// ✅ Admin-only
|
||
function requireAdmin(req, res, next) {
|
||
if (!req.session.user) return res.redirect("/");
|
||
|
||
if (req.session.user.role !== "admin") {
|
||
return denyAccess(req, res, "⛔ Kein Zugriff – diese Seite ist nur für Administratoren.");
|
||
}
|
||
|
||
req.user = req.session.user;
|
||
next();
|
||
}
|
||
|
||
// ✅ Arzt + Mitarbeiter
|
||
function requireArztOrMitarbeiter(req, res, next) {
|
||
if (!req.session.user) return res.redirect("/");
|
||
|
||
const allowed = ["arzt", "mitarbeiter"];
|
||
|
||
if (!allowed.includes(req.session.user.role)) {
|
||
return denyAccess(req, res, "⛔ Kein Zugriff – diese Seite ist nur für Ärzte und Mitarbeiter.");
|
||
}
|
||
|
||
req.user = req.session.user;
|
||
next();
|
||
}
|
||
|
||
module.exports = {
|
||
requireLogin,
|
||
requireArzt,
|
||
requireAdmin,
|
||
requireArztOrMitarbeiter,
|
||
};
|