Rollen (Admin/Mitglied), Seite Kooperationen, Textanpassungen

- Gemeinsame Zugänge mit Rollen: Admin darf alles, Mitglied nutzt Kalender,
  Fahrtplaner, Treffpunkte und bearbeitet Mitglieder (kein Hinzufügen,
  Löschen, Import, keine Patches, keine Statistik-Korrektur)
- Server prüft die Rechte (403), Konten ohne Rolle gelten als Admin
- npm run user: add <name> [admin|mitglied], role <name> <rolle>
- Neue öffentliche Seite Kooperationen mit Titelbild, Anführer,
  Social-Media-Links und Beschreibung, Pflege durch Admin
- Kopfzeile bleibt bei mittlerer Breite einzeilig
- Texte auf Wunsch gekürzt

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
guyg1474andClaude Opus 5.5 committed 2026-10-12 19:47:03 +02:00
1 parent f46016487d
commit 819219fb2d
18 files changed
+661 -106

No files matched your search

+30 -9
View File
@@ -38,26 +38,47 @@ Anderen Port wählen: `PORT=8080 npm start`.
Die Startseite zeigt als „Pile of Shame“, wer im laufenden Jahr noch nicht spielen war.
Der Jahreswechsel richtet sich nach der Zeitzone des Servers (im systemd-Dienst `Environment=TZ=Europe/Berlin` setzen).
- **Patches** (`/patches`, öffentlich) – Galerie der Gruppen- und Event-Patches, getrennt nach „Gibt es schon“ und „In Planung“.
Angemeldet: Patch hochladen (PNG, JPEG oder WebP – wird im Browser auf max. 1600 px verkleinert – oder SVG bis 2 MB),
Admin-Zugang: Patch hochladen (PNG, JPEG oder WebP – wird im Browser auf max. 1600 px verkleinert – oder SVG bis 2 MB),
bearbeiten, löschen. SVGs mit Skripten, Ereignis-Attributen oder Verweisen auf fremde Dateien werden abgelehnt
und zusätzlich mit einer Content-Security-Policy ausgeliefert.
Die Bilder liegen in `data/patches/` und sind damit im Docker-Volume und im Backup enthalten.
- **Kooperationen** (`/kooperationen`, öffentlich) – Gruppen, mit denen die HCRB zusammenarbeitet. Übersicht als Karten,
jede Kooperation hat eine eigene Ansicht (`/kooperationen#<id>`) mit Titelbild, Anführer, Social-Media-Links
(Website, Instagram, YouTube, TikTok, Facebook, Discord) und Beschreibung. Anlegen, bearbeiten, löschen nur mit dem
Admin-Zugang. Titelbilder liegen in `data/kooperationen/`.
- **Gruppe** (`/gruppe`) – feste Mitglieder (Vorname, extern ja/nein, Auto ja/nein, freie Plätze ohne Fahrer, „kommt immer mit eigenem Auto“,
Standard-Treffpunkt als Fahrer, „fährt am liebsten mit bei …“) und Treffpunkte (Name, Adresse) verwalten, Export/Import der Mitglieder als JSON.
Hinzufügen, Löschen und Import nur mit dem Admin-Zugang.
## Login
Öffentlich sind nur die Startseite (inkl. der nächsten 3 Termine: Datum, Uhrzeit, Titel, Anzahl Zusagen), die Statistik
(Namen und Anzahl gespielter Spieltage) und die Patches.
(Namen und Anzahl gespielter Spieltage), die Patches und die Kooperationen.
Kalender, Fahrtplaner, Gruppe und die komplette API sind nur nach dem Anmelden erreichbar.
Die Zugänge sind gemeinsame Konten, keine persönlichen. Es gibt zwei Rollen:
| | Admin | Mitglied |
| --- | --- | --- |
| Kalender: Termine eintragen, bearbeiten, löschen, zusagen | ✓ | ✓ |
| Fahrtplaner, Treffpunkte | ✓ | ✓ |
| Mitglieder bearbeiten, Gruppe exportieren | ✓ | ✓ |
| Mitglieder hinzufügen, löschen, Gruppe importieren | ✓ | – |
| Patches hochladen, bearbeiten, löschen | ✓ | – |
| Kooperationen anlegen, bearbeiten, löschen | ✓ | – |
| Statistik von Hand korrigieren (− / +) | ✓ | – |
Typisch: ein Konto `admin` und ein Konto für alle Mitglieder, z. B. `hcrb`.
Konten aus der Zeit vor den Rollen gelten als Admin, bis man ihre Rolle ändert.
Benutzer werden auf dem Server per Kommandozeile verwaltet:
```bash
npm run user -- list # alle Benutzer anzeigen
npm run user -- add <name> # Benutzer anlegen
npm run user -- passwd <name> # Passwort ändern (meldet den Benutzer überall ab)
npm run user -- remove <name> # Benutzer löschen (sofort abgemeldet)
npm run user -- list # alle Benutzer mit Rolle anzeigen
npm run user -- add <name> [admin|mitglied] # Benutzer anlegen (Standard: mitglied)
npm run user -- role <name> <admin|mitglied> # Rolle ändern (meldet den Benutzer überall ab)
npm run user -- passwd <name> # Passwort ändern (meldet den Benutzer überall ab)
npm run user -- remove <name> # Benutzer löschen (sofort abgemeldet)
```
Sicherheit:
@@ -71,11 +92,11 @@ Sicherheit:
## Aufbau
```
server.js Express-Server + REST-API (/api/members, /api/events, /api/meeting-points, /api/patches, .ics-Export)
server.js Express-Server + REST-API (/api/members, /api/events, /api/meeting-points, /api/patches, /api/kooperationen, .ics-Export)
auth.js Login, Passwort-Hashing, Sitzungen
scripts/user.js Benutzerverwaltung (npm run user)
data/ db.json, users.json, sessions.json, patches/ (automatisch angelegt, nicht in Git)
public/ öffentlich: Startseite, Statistik, Patches, Login, CSS, Bilder, Schriften, common.js
data/ db.json, users.json, sessions.json, patches/, kooperationen/ (automatisch angelegt, nicht in Git)
public/ öffentlich: Startseite, Statistik, Patches, Kooperationen, Login, CSS, Bilder, Schriften, common.js
private/ nur angemeldet: Kalender, Fahrtplaner, Gruppe
```