edb324719b
Admins können Objekte anlegen, umbenennen und löschen. Die Admin-Seite ist in zwei Tabs aufgeteilt: Benutzerverwaltung (?tab=benutzer) und Objektverwaltung (?tab=objekte), navigierbar per URL-Parameter. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
62 lines
1.7 KiB
TypeScript
62 lines
1.7 KiB
TypeScript
'use server';
|
|
|
|
import { redirect } from 'next/navigation';
|
|
import { getSession } from '@/lib/session';
|
|
import { query } from '@/lib/db';
|
|
|
|
export interface ObjektRow {
|
|
ID: number;
|
|
Name: string;
|
|
LastUsed: string | null;
|
|
}
|
|
|
|
export async function listObjekte(): Promise<ObjektRow[]> {
|
|
const session = await getSession();
|
|
if (!session || !session.role?.includes('admin')) redirect('/');
|
|
const rows = await query('SELECT ID, Name, LastUsed FROM objekte ORDER BY Name ASC', []);
|
|
return rows as ObjektRow[];
|
|
}
|
|
|
|
export interface BeoUser {
|
|
id: number;
|
|
kürzel: string | null;
|
|
name: string;
|
|
vorname: string | null;
|
|
role: string | null;
|
|
hasPw: boolean;
|
|
}
|
|
|
|
export async function listUsers(): Promise<BeoUser[]> {
|
|
const session = await getSession();
|
|
if (!session || !session.role?.includes('admin')) redirect('/');
|
|
|
|
const rows = await query(
|
|
'SELECT id, `kürzel`, name, vorname, role, (pw IS NOT NULL) AS hasPw FROM beos ORDER BY name, vorname',
|
|
[]
|
|
) as (Omit<BeoUser, 'hasPw'> & { hasPw: number })[];
|
|
return rows.map(r => ({ ...r, hasPw: r.hasPw === 1 }));
|
|
}
|
|
|
|
export async function resetPassword(
|
|
_prevState: { error?: string; success?: string } | undefined,
|
|
formData: FormData
|
|
): Promise<{ error?: string; success?: string }> {
|
|
const session = await getSession();
|
|
if (!session || !session.role?.includes('admin')) {
|
|
return { error: 'Keine Berechtigung.' };
|
|
}
|
|
|
|
const idRaw = formData.get('id');
|
|
const id = Number(idRaw);
|
|
if (!id || isNaN(id)) {
|
|
return { error: 'Ungültige Benutzer-ID.' };
|
|
}
|
|
|
|
await query(
|
|
'UPDATE beos SET pw = NULL, MustChangePassword = 1 WHERE id = ?',
|
|
[id]
|
|
);
|
|
|
|
return { success: 'Passwort wurde zurückgesetzt. Der Benutzer muss sich mit dem Standard-Passwort anmelden und es dann ändern.' };
|
|
}
|