06ea149d41
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>
53 lines
1.9 KiB
JavaScript
53 lines
1.9 KiB
JavaScript
// 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.`
|
|
);
|