Benutzerverwaltung mit Rollen/Rechten und Urlaubsplanung
Führt Login mit vier Rollen (Admin, Teamleiter, Mitarbeiter, Beobachter) ein, über die Teammitglieder eigenen Urlaub inkl. Pflicht-Vertreter eintragen können. Die Auslastungsberechnung berücksichtigt Urlaub jetzt als reduzierte Kapazität. Neue Konten vergeben ihr Passwort selbst beim ersten Login. Migrationsskript für bestehende Mitarbeiter aus der Vorversion inklusive. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
// Legt einen Admin-Zugang für einen bestehenden Mitarbeiter an oder setzt ihn zurück.
|
||||
//
|
||||
// Ohne --password: Konto wird (neu) angelegt, das Passwort wird beim nächsten
|
||||
// Login vom Nutzer selbst vergeben (gleicher Mechanismus wie bei der Benutzerverwaltung).
|
||||
// Mit --password: setzt sofort ein Passwort (Notfall-Wiederherstellung, falls der
|
||||
// Admin sich ausgesperrt hat).
|
||||
//
|
||||
// Aufruf:
|
||||
// node scripts/reset-admin.js --employee-id 3
|
||||
// node scripts/reset-admin.js --email admin@example.com --password neuesPasswort
|
||||
|
||||
const bcrypt = require('bcryptjs');
|
||||
const db = require('../db');
|
||||
|
||||
function readArg(name) {
|
||||
const idx = process.argv.indexOf(`--${name}`);
|
||||
return idx !== -1 ? process.argv[idx + 1] : undefined;
|
||||
}
|
||||
|
||||
const employeeId = readArg('employee-id');
|
||||
let email = readArg('email');
|
||||
const password = readArg('password');
|
||||
|
||||
if (!employeeId && !email) {
|
||||
console.error(
|
||||
'Nutzung: node scripts/reset-admin.js --employee-id <id> [--password <passwort>]\n' +
|
||||
' oder node scripts/reset-admin.js --email <email> [--password <passwort>]'
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
if (employeeId && !email) {
|
||||
const employee = db.prepare('SELECT email FROM employees WHERE id = ?').get(employeeId);
|
||||
if (!employee || !employee.email) {
|
||||
console.error(`Mitarbeiter ${employeeId} wurde nicht gefunden oder hat keine E-Mail hinterlegt.`);
|
||||
process.exit(1);
|
||||
}
|
||||
email = employee.email;
|
||||
}
|
||||
|
||||
const passwordHash = password ? bcrypt.hashSync(password, 10) : null;
|
||||
|
||||
db.prepare(
|
||||
`INSERT INTO users (employee_id, email, password_hash, role) VALUES (?, ?, ?, 'admin')
|
||||
ON CONFLICT (email) DO UPDATE SET role = 'admin', password_hash = excluded.password_hash`
|
||||
).run(employeeId || null, email, passwordHash);
|
||||
|
||||
console.log(
|
||||
password
|
||||
? `Admin-Zugang für ${email} wurde mit dem angegebenen Passwort gesetzt.`
|
||||
: `Admin-Zugang für ${email} wurde angelegt/zurückgesetzt. Passwort wird beim nächsten Login vergeben.`
|
||||
);
|
||||
Reference in New Issue
Block a user