espid2sensor: User-Liste mit Passwort-Reset und Löschen im User-Tab
Ersetzt das manuelle E-Mail-Eingabefeld für den Passwort-Reset durch eine Liste aller angemeldeten User. Pro User stehen zwei Aktionen zur Verfügung: Passwort zurücksetzen (nutzt die bestehende /api/resetPassword-Route) und Löschen (neue DELETE /api/users/:id-Route, admin-only, verhindert Löschen des eigenen Accounts). Neue GET /api/users-Route liefert Email/Rolle aller User (admin-only).
This commit is contained in:
@@ -127,4 +127,29 @@ export function registerApiRoutes(app, requireLogin) {
|
||||
res.status(500).json({ error: 'Fehler beim Zurücksetzen' });
|
||||
}
|
||||
});
|
||||
|
||||
app.get('/api/users', requireLogin, async (req, res) => {
|
||||
if (!req.session.isAdmin) return res.status(403).json({ error: 'Nur Admins erlaubt' });
|
||||
try {
|
||||
const users = await usersCollection.find({}, { projection: { email: 1, role: 1 } }).sort({ email: 1 }).toArray();
|
||||
res.json(users);
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: 'Fehler beim Laden der User' });
|
||||
}
|
||||
});
|
||||
|
||||
app.delete('/api/users/:id', requireLogin, async (req, res) => {
|
||||
if (!req.session.isAdmin) return res.status(403).json({ error: 'Nur Admins erlaubt' });
|
||||
const { id } = req.params;
|
||||
if (id === String(req.session.userId)) {
|
||||
return res.status(400).json({ error: 'Der eigene Account kann nicht gelöscht werden' });
|
||||
}
|
||||
try {
|
||||
const result = await usersCollection.deleteOne({ _id: new ObjectId(id) });
|
||||
if (result.deletedCount === 0) return res.status(404).json({ error: 'User nicht gefunden' });
|
||||
res.json({ success: true });
|
||||
} catch (err) {
|
||||
res.status(500).json({ error: 'Fehler beim Löschen' });
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user