Skip to content

Admin Bereich

Robert Einsle edited this page Oct 25, 2026 · 4 revisions

Admin-Bereich (/admin)

Es gibt einen Admin-Bereich für alle. Was man darin sieht, hängt von der Rolle ab: Admins sehen alles – oben den Kern (Kameraden, Abteilungen, Funktionen, Module, Einstellungen, Feedback, Logs), darunter je Modul eine aufklappbare Gruppe Fahrzeugbuchung, Kleiderkammer, Ausrüstung und Mängelmanagement mit eigener „Übersicht“, dazu Einsatzbericht und Personalverwaltung mit ihren Einstellungen (/admin/fahrzeugbuchung, /admin/kleiderkammer, /admin/ausruestung, /admin/maengelmanagement). Kleiderwarte, Gerätewarte, Verantwortliche im Mängelmanagement, die Wehrführung (Einsatzbericht → Einstellungen) und Personalverwalter (Personalverwaltung → Einstellungen) sehen nur die Gruppe ihres Moduls (wer mehrere Rollen hat, mehrere Gruppen); /admin führt sie direkt zur Übersicht ihres Moduls, Kern-Seiten wie Kameraden oder Logs geben 403. Die Fahrzeugbuchung verwalten nur Admins. „Verwaltung“ in der Modulleiste führt zur Übersicht des jeweiligen Moduls; die Adressen der Modul-Seiten sind dieselben wie vorher.

  • Benutzermenü (Profilbild oben rechts): Name und darunter klein die E-Mail-Adresse, dann „Zur Übersicht“ (zurück in die App), „Meine Personalakte“ und „Abmelden“.
  • Module (/admin/module): alle Module mit Beschreibung, Rollen und Anzahl freigeschalteter Kameraden; Schalter für „Aktiv“ und „Neue Kameraden automatisch freischalten“. Sortierbar nach Name, Anzahl und den Schaltern, durchsuchbar nach Name, Beschreibung und Rollen, filterbar nach aktiv/ausgeschaltet und automatischer Freischaltung. Ein Klick auf „x Kameraden“ öffnet die Kameraden des Moduls (/admin/module/{modul}/kameraden): alle Kameraden mit Abteilungen, Status, Schalter „Freigeschaltet“ und – bei Modulen mit Rollen – der Rolle (eine Rolle zu wählen schaltet das Modul gleich mit frei). Suche nach Name und E-Mail, Filter nach freigeschaltet ja/nein, Rolle, Abteilung und Status (vorgewählt: aktiv), sortierbar nach Name und Freischaltung. Mit Häkchen markierte Kameraden lassen sich gesammelt freischalten (optional mit Rolle; vorhandene Rollen bleiben) oder entziehen. Oben steht, wenn das Modul ausgeschaltet ist oder „automatisch freischalten“ ohnehin allen Zugang gibt; Admins haben immer Zugang.
  • Fahrzeuge: Name, Kurzname, Farbe, Reihenfolge und aktiv/inaktiv. Ist das Modul Fahrzeugverwaltung eingeschaltet, werden Fahrzeuge besser dort gepflegt (dieselbe Liste, mit Profil, Status und Fristen). Eine dort eingetragene Werkstatt-/Ausfallzeit sperrt das Fahrzeug: Buchen, Verschieben in diesen Zeitraum und Entscheidungsanfragen werden abgelehnt, das Formular zeigt „Fahrzeug nicht verfügbar“ mit Grund und freien Alternativen, der Kalender die Ausfallzeit grau. Bestehende Buchungen bleiben; ihre Buchenden bekommen eine Mail.
  • Abteilungen: Wo jemand Mitglied ist, zum Beispiel Einsatzabteilung, Jugendfeuerwehr oder Musikzug (Datenbank-Tabelle groups). Admins pflegen sie frei; ein Mitglied kann in mehreren sein. Buchungen lassen sich einer Abteilung zuordnen. Die Reihenfolge ändert man per Drag & Drop („Reihenfolge ändern“).
  • Funktionen: Was jemand macht, zum Beispiel Jugendwart, getrennt von der Abteilung (die Jugendfeuerwehr ist eine Abteilung, der Jugendwart eine Funktion). Jede Funktion kann Unterfunktionen haben (zwei Ebenen); beides ist sortierbar. Das Löschen einer Funktion entfernt sie samt Unterfunktionen bei allen Mitgliedern.
  • Export und Import (Abteilungen, Funktionen): Oben auf beiden Listen. „Exportieren“ lädt eine CSV für Excel (UTF-8, Semikolon): Abteilung;Reihenfolge;Mitglieder bzw. Funktion;Unterfunktion;Reihenfolge;Mitglieder – eine Zeile je Funktion und je Unterfunktion, Mitglieder als E-Mail-Adressen. „Importieren“ nimmt so eine Datei (auch mit Komma getrennt): Vorhandene Einträge werden über den Namen erkannt (ohne Groß-/Kleinschreibung) und ihre Reihenfolge aktualisiert, neue angelegt, Unterfunktionen unter ihrer Funktion; gelöscht wird nichts. Mit „Mitglieder zuordnen“ werden die Kameraden über die E-Mail-Adresse hinzugefügt (niemand wird entfernt); unbekannte Adressen stehen in der Meldung. Eine Datei mit anderen Spalten wird abgelehnt.
  • Einstellungen (/admin/einstellungen): Wehrname, Kurzname, Mail-Signatur, Code-Präfix der Kleiderkammer und Logo (PNG, JPEG, WebP oder SVG bis 2 MB, in der Datenbank gespeichert; ein SVG wird so ausgeliefert, dass darin enthaltene Skripte nicht laufen); darunter die Dienste: API-Schlüssel für Google Maps und für OpenRouter sowie das KI-Modell, das über OpenRouter genutzt wird (Liste von OpenRouter, nach Namen sortiert). Die Schlüssel werden verschlüsselt gespeichert und nach dem Speichern nicht mehr angezeigt; leer lassen behält den gespeicherten, ein Schalter entfernt ihn. „Google Maps testen“ und „OpenRouter testen“ prüfen den eingegebenen oder gespeicherten Schlüssel. Noch nutzt keine Funktion die Schlüssel.
  • Kameraden (/admin/kameraden): Die Liste zeigt Name, E-Mail, Abteilungen, Funktionen (Unterfunktionen als „Funktion › Unterfunktion“), Admin, Status und letzten Login; nach Modulzugang filtert der Filter „Modul-Zugriff“. Häkchen für Administrator und Entscheider, dazu der Status (aktiv, inaktiv, ausgetreten). Nur aktive Kameraden können sich anmelden. Unter „Mitgliedsdaten“ stehen Abteilungen (Mehrfachauswahl), Geschlecht, Dienstgrad, „Im Dienstgrad seit“, Eintritt in die Feuerwehr (beides TT.MM.JJJJ, Grundlage für Beförderungsvoraussetzungen), Funktionen und Notizen. Der Dienstgrad kommt bei „männlich“ und „weiblich“ aus der jeweiligen Liste der Feuerwehr Schleswig-Holstein (von Feuerwehrmann-Anwärter bis Landesbrandmeister, bei Frauen in der weiblichen Form); wechselt das Geschlecht, springt der Dienstgrad auf dieselbe Stufe der anderen Liste. Bei „divers“ ist er ein Freitext. Ein früher eingetragener Freitext-Dienstgrad bleibt als „(bisher)“ wählbar. Bei den Funktionen wählt man Unterfunktionen (Anzeige „Funktion › Unterfunktion“); eine Funktion ohne Unterfunktion steht direkt zur Wahl. Die Suche im Feld findet auch über den Namen der Funktion, „Jugend“ also alle Unterfunktionen von „Jugendwart“. Das Geburtsdatum wird ohne Kalender als TT.MM.JJJJ eingetippt (im Profil genauso); diese Daten pflegen nur Admins, die Kleiderkammer liest sie mit. Filter nach Abteilung, Funktion, Rolle und Status. Die Spalten E-Mail und Module lassen sich ein- und ausblenden; „Module“ zeigt je Kamerad die freigeschalteten Module (Admins: „Alle“). Module zuordnen: Mit Häkchen markierte Kameraden bekommen über „Module freischalten“ (Sammelaktion) Module samt Rolle: Die Module stehen als Liste mit Häkchen da, mehrere auf einmal; für jedes angekreuzte Modul mit Rollen erscheint eine Rollenauswahl („Ohne Rolle“ lässt eine Rolle, die jemand schon hat, stehen). „Modul entziehen“ nimmt ein Modul wieder weg. Der Button „Module für alle Gefilterten“ oben wirkt dagegen auf alle Kameraden, die Filter und Suche gerade treffen, auch auf anderen Seiten; die Zahl steht im Dialog. Außerdem lässt sich ein Login-Link direkt versenden.
  • Mitglieder ohne Login (z. B. Kinder der Jugendfeuerwehr, Mitglieder des Musikzugs): Beim Anlegen das Feld E-Mail-Adresse leer lassen – unter Admin → Kameraden oder in der Personalverwaltung unter „Neue Mitglieder“. Das Mitglied ist ein ganz normales, aktives Mitglied und steht überall zur Auswahl, wo Kameraden gewählt werden: Kleidung ausgeben (Kleiderkammer), Unterweisungen, Verbandbuch, Lehrgänge, Kalender-Zielgruppen, Personalverwaltung usw. Es kann sich aber nicht anmelden: kein Login-Link, keine Einladung (die Knöpfe fehlen), kein Zugang zum Admin-Bereich; in der Liste steht statt der Adresse „ohne Login“, in der Personalakte die Marke „ohne Login“. Mails an das Mitglied entfallen, Benachrichtigungen landen nur unter der Glocke. Sind Erziehungsberechtigte eingetragen, bekommen sie die Kalender-Mails des Kindes trotzdem und antworten für es. Mehrere Mitglieder ohne Adresse sind kein Problem; Admins brauchen eine Adresse. Soll das Mitglied später doch selbst in die App, trägt man eine Adresse nach und schickt die Einladung. Der CSV-Import der Personalverwaltung braucht weiter eine Adresse je Zeile (er erkennt Mitglieder daran); Mitglieder ohne Login einzeln anlegen.
  • Kameraden nach Funktion filtern: Der Filter „Funktion“ listet alle Funktionen mit ihren Unterfunktionen („Vorstand (mit Unterfunktionen)“, „Vorstand › Kassenwart“). Eine Funktion mit Unterfunktionen zeigt alle Kameraden, die sie oder eine ihrer Unterfunktionen haben – z. B. „Vorstand“ den ganzen Vorstand. Mehrere Funktionen lassen sich kombinieren.
  • Kameraden-Liste sortieren: Standard ist „Letzter Login“, der jüngste oben, „Noch nie“ ganz unten. Sortierbar sind außerdem Name, E-Mail, Abteilungen (nach der Reihenfolge der ersten Abteilung), Admin und Status.
  • Einladung (QR-Symbol in der Kameraden-Liste, auch in der Personalverwaltung): ein Anmelde-Link für einen (neuen) Kameraden, der nur einmal gilt – als QR-Code, den er in der Wache mit dem Handy scannt (30 Minuten gültig), oder „Per E-Mail schicken“ (48 Stunden gültig; danach fordert der Kamerad mit seiner Adresse einfach einen Login-Link an). Meldet er sich an, verfallen seine übrigen offenen Links. Wie beim Login-Link zeigt der Link erst einen Knopf, angemeldet wird mit dem Klick (Mail-Scanner verbrauchen ihn nicht). Die erste Anmeldung führt zur Seite „Willkommen“ (/willkommen) mit den ersten Schritten, abgehakt sobald erledigt: Profilfoto, App auf den Startbildschirm, Push einschalten, persönliche Daten (wenn die Personalverwaltung sie führt), Führerschein (wenn das Modul an ist), Ansprechpartner.
  • Als Kamerad ansehen: In der Kameraden-Liste (Augen-Symbol am Anfang der Zeile, neben „Login-Link senden“ und „Bearbeiten“) oder oben auf „Kamerad bearbeiten“ meldet „Als Kamerad ansehen“ den Admin als diesen Kameraden an – er sieht die App genau so, mit dessen Rechten (Admins und inaktive Kameraden lassen sich nicht übernehmen). Ein oranger Balken oben („Du siehst die App als …“, auch in den Verwaltungsbereichen der Module) führt mit „Zurück zum Admin“ zur eigenen Anmeldung und zur Kameraden-Liste zurück. Alles, was der Admin in der Zeit tut, geschieht im Namen des Kameraden; der letzte Login des Kameraden ändert sich nicht. Jede Übernahme wird ins Log geschrieben.
  • Analyse (/admin/analyse, nur Admins, im Menü zwischen „Module“ und „Logs“): Läuft die App, und muss jemand eingreifen? Ganz oben steht, was gerade Aufmerksamkeit braucht.
    • Betrieb: Fehler der letzten 7 Tage, nach Stelle zusammengefasst (Admins bekommen je Stelle höchstens einmal am Tag eine Nachricht per Mail und Glocke), mit den letzten Fehlern; Erreichbarkeit über 7 und 30 Tage (der Scheduler meldet sich jede Minute, fehlende Minuten sind Ausfälle; die längsten stehen darunter); Antwortzeiten (Durchschnitt, langsamste, Zahl der Aufrufe und Serverfehler HTTP 5xx); Backups (letzte Meldung und ihr Alter – der Backup-Job ruft nach jedem Lauf die geheime Webhook-Adresse auf, oder ein Admin klickt „Heute geprüft“); geplante Aufgaben (jeder Cronjob mit letztem Lauf, letztem Fehler, Läufen und Fehlern; eine Warteschlange gibt es nicht); Mailversand (verschickt und fehlgeschlagen, dazu die Prüfung von SMTP/SES, Google und OpenRouter); Ressourcen (Speicherplatz, Größe der Datenbank und der größten Tabellen); TLS-Zertifikat der App-Adresse mit Ablaufdatum; Version und seit wann sie läuft.
    • Sicherheit und Nachvollziehbarkeit (30 Tage): erfolgreiche, fehlgeschlagene (ungültige oder abgelaufene Links, deaktivierte Konten) und gesperrte Anmeldungen (zu viele Login-Links), angeforderte Login-Links, geänderte E-Mail-Adressen (Passwörter gibt es nicht), Rechte- und Rollenänderungen (Admin, Status, Modulrollen – wer, wann, bei wem) und die letzten 5 Einträge des Audit-Logs mit Link zu den Logs.
    • Nutzung: Nutzung je Modul (Aufrufe in 30 und 90 Tagen, geänderte Datensätze in 90 Tagen; „nie genutzt“ markiert Kandidaten zum Ausschalten), Datensätze (größte Tabellen mit Anzahl und Zuwachs in 30 Tagen) und die letzte Anmeldung je Kamerad (wer seit 90 Tagen nicht da war oder noch nie, ist markiert). Gezählt wird je Modul und Bereich, nicht je Person – die einzige Angabe je Kamerad ist die letzte Anmeldung, die auch in der Kameradenliste steht.
    • Löschfristen: wie lange technische Logs (Fehler, Aufrufzahlen, Erreichbarkeit; Standard 90 Tage), das Audit-Log (Standard 180 Tage) und das Mail-Log (Standard 180 Tage) bleiben; die nächtliche Bereinigung löscht Älteres. Verbandbuch und Expositionen haben ihre eigenen, gesetzlichen Fristen.
    • Tägliche Prüfung (7:15 Uhr, app:health-check): Zertifikat neu lesen, dann eine Mail an die Admins, wenn das Backup älter als 26 Stunden oder fehlgeschlagen ist, das Zertifikat in weniger als 14 Tagen abläuft, eine geplante Aufgabe fehlgeschlagen ist, der Speicher zu 90 % voll ist oder der Scheduler steht.
  • Logs (/admin/logs): alles, was in der App passiert – jede angelegte, geänderte und gelöschte Sache (auch durch die Kameraden, z. B. Buchungen, Anmeldungen, Kommentare, Mitteilungen), Anmeldungen, „Als Kamerad angesehen“ und jede versendete E-Mail. Je Eintrag: Zeit, Wer (oder „System“ bei automatischen Abläufen wie Import und Erinnerungen; während „Als Kamerad ansehen“ mit „über Admin …“), Was (Angelegt, Geändert, Gelöscht, Anmeldung, Als Kamerad angesehen, E-Mail), Betrifft (Name und Bereich, z. B. „Fahrzeugbuchung: Buchung“) und die geänderten Felder (vorher → nachher). Suche nach Wer und Betrifft, Filter nach Zeitraum, Was, Bereich und Wer, neueste zuerst. „Ansehen“ zeigt alle Felder bzw. die E-Mail wie verschickt; bei E-Mails gibt es „Erneut senden“ (unverändert an dieselben Empfänger, als „Erneut gesendet“ protokolliert). Nicht gespeichert werden Passwörter, Schlüssel, Tokens, Dateiinhalte und reine Verwaltungsänderungen (letzter Login, „Erinnerung verschickt“, Sortierung); Login- und Bestätigungslinks in E-Mails werden ohne Inhalt gespeichert und lassen sich nicht erneut senden. Einträge werden nach 180 Tagen gelöscht (model:prune, täglich).
  • Kameraden löschen: Hängen an einem Kameraden noch Buchungen, Nachrichten oder Ausrüstung, wird er mit „Löschen“ nicht gelöscht; stattdessen erscheint ein Hinweis, den Status auf „Ausgetreten“ zu setzen. So bleibt die Historie erhalten.
  • Löschen mit Übertragung (im Kamerad oben, nicht für sich selbst): wenn ein Kamerad wirklich gelöscht werden muss. Das Fenster zeigt je Bereich, wie viele Einträge an ihm hängen (z. B. „Fahrzeugbuchung: 12 · Einsatzbericht: 3“); man wählt den Kameraden, auf den alles übertragen wird, bestätigt, und erst dann wird gelöscht – alles oder nichts. Übertragen wird alles, was auf den Kameraden verweist: Buchungen, ausgegebene Kleidung, Ausleihen, gemeldete Mängel, Fahrten, Einsatz-Besatzungen, „angelegt von“, „geprüft von“ usw., auch in künftigen Modulen. Stand er mit dem Ziel-Kameraden im selben Einsatz, bleibt nur ein Eintrag. Mit dem Kameraden gelöscht werden Persönliches wie Zugänge, Abteilungen, Funktionen, Lehrgänge, Atemschutz-Daten, eigene Rückmeldungen, Schichten, Profilbild und Benachrichtigungen. Nicht übertragen werden Logs und das Verbandbuch: Dort bleibt der Name als Text stehen, nur die Verknüpfung entfällt, so landen keine Gesundheitsdaten bei einem anderen. Tipp: einen Kameraden „Ehemalige Mitglieder“ mit Status „Ausgetreten“ anlegen und dorthin übertragen. Im Log steht „Übertragen und gelöscht“ mit der Übersicht.
  • Buchungen: alle Buchungen mit Status (bestätigt, wartet auf Entscheidung, abgelehnt), Stornieren, Bearbeiten und „Zurückgeben“ für laufende Buchungen. Stornieren, Ändern und Löschen lösen dieselben Automatismen aus wie in der App.
  • Feedback: siehe oben.
  • E-Mail-Texte: Betreff, Anrede, Text, Button-Beschriftung und Grußformel der Erinnerungsmail vor Buchungsende lassen sich bearbeiten. Platzhalter wie {name}, {fahrzeug} oder {ende_uhrzeit} werden beim Versand ersetzt. „Standard wiederherstellen“ setzt den Text auf die ursprüngliche Fassung zurück.
  • Keine Suchmaschinen, keine KI: Eine openwehr-Instanz ist das interne Werkzeug einer Wehr. robots.txt sperrt alle Crawler, auch die KI-Crawler (z. B. GPTBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot) einzeln genannt; jede Antwort der App – Seiten, Admin-Bereich, PDFs, Pläne, Fotos, Kalender-Feeds und der öffentliche Kalender – trägt zusätzlich den Header X-Robots-Tag: noindex, nofollow, noarchive, nosnippet, noimageindex, …. Der öffentliche Kalender lässt sich weiter per <iframe> einbinden, erscheint aber nicht selbst in Suchergebnissen. Vorschauen beim Teilen in Messengern funktionieren weiter.
  • Deutsche Adressen: Alle Adressen der App und des Admin-Bereichs sind deutsch, z. B. /personalakte (Profil), /anmelden, /fahrzeugbuchung (Kalender), /fahrzeugbuchung/meine-buchungen, /fahrzeugbuchung/entscheidungen, /admin/kameraden, /admin/kameraden/{id}/bearbeiten, /admin/kameraden/neu, /admin/abteilungen, /admin/funktionen, /admin/module, /admin/einstellungen, /admin/feedback, /admin/logs, in der Kleiderkammer /admin/kleiderkammer/einzelteile, …/massenbestand, …/scanner, …/bestandsbericht, …/kameraden, …/maengelmanagement, …/datentransfer, …/kategorien, …/artikeltypen. Die alten englischen Adressen (/admin/users, /fahrzeugbuchung/calendar, /profile, /admin/e-mail-log, /admin/manage-modules, /admin/modules …) leiten dauerhaft (301) auf die neuen weiter, samt Unterseiten (…/create → …/neu, …/{id}/edit → …/{id}/bearbeiten) und Parametern; Lesezeichen und Links in schon verschickten Mails funktionieren also weiter. Der Rückgabe-Link aus Erinnerungsmails von vor der Umstellung bleibt unter der alten Adresse gültig.
  • Menü: „Abteilungen“ und „Funktionen“ stehen als Untermenü unter „Kameraden“. Die Meldungen der Kameraden zu ihrer Ausrüstung (Mängel und Wäsche-Anforderungen) heißen in der Kleiderkammer „Mängel & Wäsche“.
  • Navigation: Unter den Menüpunkten steht der Link zum Wachen-Monitor (öffnet in einem neuen Fenster); die App-Version steht klein hinter dem Titel oben links („… Admin V.0.9.5.3“).
  • Admin-Dashboard (/admin): Letzte Anmeldungen (die fünf jüngsten Logins mit Name und Uhrzeit, neueste oben; „Alle Logs“), Letztes Feedback (die fünf Gespräche mit der jüngsten Nachricht, ungelesene mit rotem Punkt, ein Klick öffnet das Gespräch) und Verbindungen, darunter Betrieb aus der Analyse: in der ersten Reihe Version (seit wann sie läuft), TLS-Zertifikat (Tage bis zum Ablauf) und Ressourcen (Speicher, Datenbank), in der zweiten Mailversand (fehlgeschlagen in 30 Tagen, verschickt), Backups (Alter der letzten Meldung) und Antwortzeiten (7 Tage) – mit Link „Analyse öffnen“. Verbindungen prüft, ob der E-Mail-Versand (SMTP: Verbindung und Anmeldung am Server, ohne eine Mail zu schicken; Amazon SES: Abfrage des Sendekontingents; MAIL_MAILER=log gilt als Warnung, weil dann keine Mails rausgehen), die Google API und OpenRouter funktionieren. Ohne hinterlegten Schlüssel steht „Nicht eingerichtet“. Geprüft wird höchstens alle 15 Minuten (App\Services\ServiceHealth), „Jetzt prüfen“ prüft sofort.
  • Übersicht: oben nebeneinander (auf dem Handy untereinander) die Top 5 der Mitglieder mit den meisten Buchungen und die kommenden Buchungen der nächsten 7 Tage, darunter über die ganze Breite die Fahrzeuge sortiert nach Anzahl Buchungen, ganz unten der Link zum Wachen-Monitor. Über „Zur App“ geht es zurück zum Kalender.

E-Mails

Alle Mails sind auf Deutsch und werden sofort verschickt, ein Queue-Worker ist nicht nötig. Kann eine Mail nicht zugestellt werden, landet der Fehler im Log. Die eigentliche Aktion, etwa eine Entscheidung, bleibt trotzdem gespeichert.

Anlass Empfänger
Login-Link die anfragende Person
Erinnerung 1 Stunde vor Buchungsende (Text im Admin-Bereich änderbar) die buchende Person
Entscheidung nötig alle Entscheider (ersatzweise Admins)
Entscheidung getroffen / geändert anfragende Person und Besitzer der bestehenden Buchungen
Bereits entschieden die übrigen Entscheider
Entscheidung zurückgenommen alle Beteiligten
Buchung automatisch reaktiviert alle Beteiligten
Anfrage zurückgezogen die Entscheider
Neues Feedback / Antwort vom Mitglied alle Admins
Antwort vom Admin das Mitglied

Clone this wiki locally