Presentation Update

This commit is contained in:
2026-04-16 16:42:43 +02:00
parent 35a0ebd15a
commit 4e0861147a

View File

@@ -42,52 +42,84 @@ paginate: true
# Backup- & Restore-Systeme (1) # Backup- & Restore-Systeme (1)
- **Problem**: Schutz der Daten vor Hardwareausfällen, Softwarefehlern oder Cyberangriffen. - **Problem**: Schutz der Daten vor Hardwareausfällen, Softwarefehlern oder Cyberangriffen.
- **Lösung: Vollautomatisiertes Backup-Skript** - **Lösung: Vollautomatisiertes Backup-Skript**
- **Cronjob** führt Skript nachtschlafend (`02:30 Uhr`) aus.
- Sichert die `PostgreSQL`-Datenbank im Custom-Format (`pg_dump -Fc`). ```mermaid
- Komprimiert den gesamten App-Dateibaum mittels `tar -cvpzf`. graph TD
- Alle Backups erhalten UTC-Zeitstempel für ordentliche Strukturierung. Start((Start: Cronjob 02:30)) --> Init[Initialisierung]
Init --> Vars[Konfiguration laden]
subgraph Sicherungsphase
Dir[Erstelle Backup-Ordner] --> DB[Datenbank-Backup]
DB --> Files[Dateisystem sichern]
end
Files --> Check{Fehler?}
Check -- Ja --> Mail[Log Error & Abbruch]
Check -- Nein --> Rotate[Lade Backups-Liste]
subgraph Speicherverwaltung
Rotate --> Count{Anzahl > 30?}
Count -- Ja --> Delete[Älteste löschen]
Count -- Nein --> Finish[Abschluss]
Delete --> Finish
end
Finish --> Ende((Ende))
```
--- ---
# Backup- & Restore-Systeme (2) # Backup- & Restore-Systeme (2)
- **Retention Management**: - **Retention Management**:
- Automatische Bereinigung alter Backups (Rotation). Nur die neuesten 30 Backups (`RETAIN=30`) bleiben vorhanden, um Speicherplatz zu sparen. - Automatische Bereinigung alter Backups (Rotation).
- Nur die neuesten 30 Backups bleiben vorhanden, um Speicherplatz zu sparen.
- **Restore-Skript**: - **Restore-Skript**:
- Kontrollierter Wiederherstellungsprozess. - Kontrollierter Wiederherstellungsprozess.
- Integrierte Sicherheitsabfrage (`ja/nein`) vor dem Überschreiben. - Integrierte Sicherheitsabfrage vor dem Überschreiben.
- Umbenennen bestehender Ordner als "Rückversicherung". - Umbenennen bestehender Ordner als "Rückversicherung".
- Neuanlage der Datenbank (`dropdb` / `createdb`) & Einspielen via `pg_restore`. - Neuanlage der Datenbank & Einspielen des Backups.
--- ---
# Authentifizierung mit LinkedIn (OAuth 2.0) # Authentifizierung mit LinkedIn (OAuth 2.0)
- **Ziel**: Reduzierung von Registrierungshürden und Steigerung der Plattformsicherheit (keine Passwörter im eigenen System speichern). - **Ziel**: Reduzierung von Registrierungshürden und Steigerung der Plattformsicherheit (keine Passwörter im eigenen System speichern).
- **Ablauf**:
- Nutzer klickt auf "Via LinkedIn Anmelden". ![Ablauf der OAuth-Authentifizierung (Erstellt mit ChatGPT)](./images/04-Florian/oauth-flow.png)
- Weiterleitung an LinkedIn -> Freigabe durch den Nutzer.
- Oqtane External Login fängt Authorization Code ab, tauscht diesen gegen ein Access Token.
- Automatisches Mapping auf lokales Benutzerkonto mithilfe der definierten *Claims* (Name, System-ID).
--- ---
# Der Premium-Bereich (1) # Der Premium-Bereich (1)
- **Zweck**: Anreiz für aktives Engagement im Absolventenverein. - **Zweck**: Anreiz für aktives Engagement im Absolventenverein.
- **Ingenieur-Antrags-Workflow**:
- Nutzer können *Ingenieur-Anträge* (PDF) via Oqtane FileManager hochladen (`Entity: EngineerApplication`). **Ingenieur-Antrags-Workflow & Prüfung:**
- Nach Prüfung und Freigabe durch Admins (`Approved`) wird automatisch für 12 Monate der Premium-Status vergeben (`UserPremium`). ![Formular zum Einreichen eines Ingenieur-Antrags](./images/04-Florian/ingenieur-antrag-status.png)
- **Bibliothek**:
- Premium-Mitglieder können eine Übersicht aller genehmigten Vorzeige-Anträge einsehen. **Bibliothek genehmigter Vorzeige-Anträge:**
![Ansicht der genehmigten Ingenieur-Anträge](./images/04-Florian/ingenieur-antraege-liste.png)
--- ---
# Der Premium-Bereich (2) # Der Premium-Bereich (2)
- **Mitgliedersuche & Kontakt**: **Architektur des Premium-Bereich-Moduls:**
- Gezielte, datensparsame Suchfunktion nach anderen Absolventen. ```mermaid
- Die Suche filtert sensible Daten serverseitig heraus, bevor es zum Client geschickt wird. graph LR
- **Kontakt-Mechanismus**: In-App Nachrichtensystem *ohne* Preisgabe der persönlichen E-Mail-Adresse. Oqtane übernimmt als Broker die Zustellung. subgraph Client [WebAssembly]
- **Architektur**: UI[Benutzeroberfläche] --> SvcC[Service Client]
- Umsetzung über EF Core (Tabellen: `UserPremium`, `EngineerApplication`, `PremiumEvent` wg. Audit-Trails). end
- Rollenbasierte Zugriffskontrollen tief in der Service-Schicht (`IsAuthorized`).
subgraph Server [ASP.NET Core]
SvcC --> Ctrl[API Controller]
Ctrl --> SvcS[Service Schicht]
end
subgraph Data [Datenbank]
SvcS --> EF[EF Core]
EF --> DB[(PostgreSQL)]
end
```
**Datensparsame Mitgliedersuche & Kontaktfunktion:**
![Mitgliedersuche und Kontaktfunktion für Premium-Mitglieder](./images/04-Florian/premium-mitglieder-suche.png)
--- ---