81 lines
2.7 KiB
JavaScript
81 lines
2.7 KiB
JavaScript
|
const express = require('express');
|
||
|
const { register, login } = require('../controllers/authController');
|
||
|
const authMiddleware = require('../middleware/authMiddleware');
|
||
|
const adminMiddleware = require('../middleware/adminMiddleware');
|
||
|
const User = require('../models/User');
|
||
|
|
||
|
const router = express.Router();
|
||
|
|
||
|
// Registrierungsroute
|
||
|
router.post('/register', register);
|
||
|
|
||
|
// Loginroute
|
||
|
router.post('/login', login);
|
||
|
|
||
|
// Geschützte Route, die die Benutzerinformationen zurückgibt
|
||
|
router.get('/me', authMiddleware, (req, res) => {
|
||
|
res.status(200).json({
|
||
|
id: req.user.id,
|
||
|
user: req.user.username,
|
||
|
docAccess: req.user.docAccess,
|
||
|
isAdmin: req.user.isAdmin,
|
||
|
message: 'Benutzerinformationen abgerufen',
|
||
|
});
|
||
|
});
|
||
|
|
||
|
// Eine geschützte Admin-Route
|
||
|
router.get('/admin', authMiddleware, adminMiddleware, (req, res) => {
|
||
|
res.status(200).json({ message: 'Willkommen, Admin!' });
|
||
|
});
|
||
|
|
||
|
// Admin-Route, die eine Liste aller Benutzer zurückgibt
|
||
|
router.get('/users', authMiddleware, adminMiddleware, async (req, res) => {
|
||
|
try {
|
||
|
// Suche alle Benutzer und gib nur die Felder 'username', 'email' und 'docAccess' zurück
|
||
|
const users = await User.find({}, 'username email docAccess');
|
||
|
res.status(200).json(users);
|
||
|
} catch (error) {
|
||
|
console.error(error);
|
||
|
res.status(500).json({ message: 'Fehler beim Abrufen der Benutzerdaten' });
|
||
|
}
|
||
|
});
|
||
|
|
||
|
router.put('/user/:id/docAccess', authMiddleware, adminMiddleware, async (req, res) => {
|
||
|
const { id } = req.params;
|
||
|
const { docAccess } = req.body;
|
||
|
|
||
|
// Sicherheitsvalidierung: docAccess-Wert muss zwischen 0 und 4 liegen
|
||
|
if (![0, 1, 2, 3, 4].includes(docAccess)) {
|
||
|
return res.status(400).json({ message: 'Ungültiger docAccess-Wert' });
|
||
|
}
|
||
|
|
||
|
try {
|
||
|
const user = await User.findByIdAndUpdate(
|
||
|
id,
|
||
|
{ docAccess },
|
||
|
{ new: true, fields: 'username email docAccess' } // nur ausgewählte Felder zurückgeben
|
||
|
);
|
||
|
if (!user) return res.status(404).json({ message: 'Benutzer nicht gefunden' });
|
||
|
res.status(200).json(user);
|
||
|
} catch (error) {
|
||
|
console.error(error);
|
||
|
res.status(500).json({ message: 'Fehler beim Aktualisieren von docAccess' });
|
||
|
}
|
||
|
});
|
||
|
|
||
|
router.delete('/user/:id', authMiddleware, adminMiddleware, async (req, res) => {
|
||
|
const { id } = req.params;
|
||
|
|
||
|
try {
|
||
|
const user = await User.findByIdAndDelete(id);
|
||
|
if (!user) return res.status(404).json({ message: 'Benutzer nicht gefunden' });
|
||
|
res.status(200).json({ message: 'Benutzer erfolgreich gelöscht' });
|
||
|
} catch (error) {
|
||
|
console.error(error);
|
||
|
res.status(500).json({ message: 'Fehler beim Löschen des Benutzers' });
|
||
|
}
|
||
|
});
|
||
|
|
||
|
|
||
|
module.exports = router;
|