Moderne Anwesenheitserfassung für ehrenamtliche Organisationen
Entwickelt für gemeinnützige Organisationen, wie z.B. Musikvereine, Sportvereine, ... Kostenlos unter AGPL-3.0 nutzbar.
💼 Kommerziell nutzen? Siehe Lizenzierung
Anwesenheit ist EhrenSache!
Und jetzt einfach und überall erfassbar ohne Zettel und Stift. Egal ob jeder sich eigenverantwortlich anmeldet oder der Schriftführer die Anwesenheit prüft. EhrenSache erfasst Anwesenheit und Entschuldigungen inklusive nachträglicher Korrekturmöglichkeit.
Jeder kann seine Statistik einsehen und prüfen, ob alles erfasst wurde. Inklusive Ankunftszeit, für alle die Pünktlichkeit belohnen wollen.
- Mehrstufiges Rollensystem: Admin, Manager und Benutzer mit differenzierten Berechtigungen
- Flexible Zeiterfassung: Unterstützung für Web-Dashboard, Mobile PWA, QR-Codes, NFC-Tags und IoT-Geräte
- Terminverwaltung: Planung von Terminen mit Gruppenzuordnung und Teilnehmerverwaltung
- Ausnahmenverwaltung: Erfassung von Abwesenheiten, Urlaub und Sonderregelungen
- Gruppenverwaltung: Organisation von Mitgliedern in verschiedenen Gruppen
- Sichere Authentifizierung: Session-basiert für Web, Token-basiert für Geräte
- TOTP-Standortverifikation: Zeitbasierte Einmalpasswörter für sichere Check-ins
- Intelligentes Caching: ~90% Reduktion der API-Anfragen durch Jahr-basiertes Caching
- Progressive Web App: Installation auf Mobilgeräten möglich
- Responsive Design: Optimiert für Desktop, Tablet und Smartphone
- XSS-Schutz durch Content Security Policy
- SQL-Injection-Prävention mit Prepared Statements
- CSRF-Schutz für Dateneingaben
- Sichere Session-Verwaltung mit HttpOnly und SameSite Cookies
- Input-Validierung auf Client- und Server-Seite
- Sichere Datei-Upload-Verifikation
EhrenSache verarbeitet personenbezogene Daten. Als Betreiber sind Sie Verantwortlicher im Sinne der DSGVO und müssen eigenständig für datenschutzkonforme Nutzung sorgen.
Betreiber-Pflichten:
- ✓ Datenschutzerklärung erstellen
- ✓ Rechtsgrundlage definieren (z.B. berechtigtes Interesse)
- ✓ Mitglieder informieren
- ✓ Betroffenenrechte gewährleisten
- ✓ Technische Schutzmaßnahmen (HTTPS, Backups, etc.)
Der Entwickler:
- ❌ Ist NICHT verantwortlich für Ihre Datenverarbeitung
- ❌ Haftet NICHT für DSGVO-Verstöße in Ihrer Installation
- ❌ Gibt KEINE Rechtsberatung
📄 Ausführliche Informationen: DATENSCHUTZ.md
⚖️ Haftungsausschluss: HAFTUNGSAUSSCHLUSS.md
Konsultieren Sie vor Inbetriebnahme einen Datenschutzbeauftragten oder Fachanwalt für IT-Recht, um die DSGVO-Konformität sicherzustellen.
Backend:
- PHP 8+ (Vanilla)
- MySQL 5.7+
- REST API Architektur
Frontend:
- Vanilla HTML + JavaScript
- CSS3 (Grid, Flexbox)
IoT-Integration (WIP):
- TOTP-Device für QR-Checkin via App
- (geplant) Fingerprint-Scanner für Biometrie-Checkin
- Webserver mit PHP 8+ und MySQL 5.7+
- SSL-Zertifikat (für PWA und sichere Authentifizierung)
- Schreibrechte für Upload-Verzeichnisse
- Repository klonen oder Paket downloaden:
git clone https://github.com/mcmaier/EhrenSache.git- Komplettes Verzeichnis in Webspace hochladen.
Warning
Die Web-Root der (Sub-)Domain muss auf den Ordner EhrenSache/public zeigen!
-
Ggf. Neue Datenbank erstellen.
-
Setup ausführen (Angenommen, Ehrensache ist in der Subdomain ehrensache.meine-domain.de installiert):
https://ehrensache.meine-domain.de/install
Während der Installation wird ein Admin-Account erstellt.
- Als Admin Einloggen:
- Gruppenverwaltung --> Mindestens eine Benutzergruppe anlegen
- Gruppenverwaltung --> Eine Terminart erstellen und Benutzergruppe zuweisen
- Datenschutz konfigurieren
- Datenschutzerklärung erstellen und verlinken
- Mitglieder informieren (Rundmail, Mitgliederversammlung)
Siehe DATENSCHUTZ.md für Checkliste und Muster-Texte.
- Mitglieder anlegen oder aus CSV Importieren
- Datenbankbackup erstellen (wird im Wizard abgefragt, aber vorab erledigen!)
- Neue Dateien auf den Server hochladen (bestehende Dateien überschreiben).
Warning
private/config/config.php nicht überschreiben – sie enthält die Zugangsdaten der Installation!
-
Update-Wizard freischalten: Inhalt von
public/update/.htaccessleeren oder die Datei löschen. -
Update-Wizard aufrufen:
https://ehrensache.meine-domain.de/update
- Wizard durchlaufen:
- Schritt 1: Systemprüfung und automatische Versionserkennung
- Schritt 2: Prefix eingeben (nur bei Update von v1.0.0), Änderungen prüfen, Backup bestätigen
- Schritt 3: Migration wird ausgeführt, Protokoll wird angezeigt
Nach erfolgter Migration sperrt sich der Wizard automatisch wieder.
Note
Bei Update von v1.0.0 → v1.1.x: Der Wizard ergänzt config.php automatisch um das Prefix-Feld und benennt alle Tabellen entsprechend um. Es ist kein manueller Eingriff in die Konfiguration nötig.
Dashboard-Zugriff:
- Login mit Admin-Credentials
- Zugriff auf alle Verwaltungsfunktionen über das Hauptmenü
Mitglieder verwalten:
- Navigation: Dashboard → Mitglieder
- Funktionen: Anlegen, Bearbeiten, Rollenzuweisung, Gruppenzuordnung
- Profile enthalten: Stammdaten, Gruppenzugehörigkeit, Berechtigungen
Termine erstellen:
- Dashboard → Termine → Neuer Termin
- Ausfüllen: Name, Beschreibung, Datum/Uhrzeit, Termintyp
- Gruppen zuweisen (optional: Nur bestimmte Gruppen dürfen teilnehmen)
Anwesenheit prüfen:
- Dashboard → Termine → Termin auswählen → Anwesenheitsliste
- Filterung nach Termin oder Mitglied
- Export-Funktion für Berichte
Geräte verwalten:
- Dashboard → Geräte
- Token generieren für neue IoT-Geräte
- TOTP-Secrets für standortbasierte Verifikation
- Geräte aktivieren/deaktivieren
Manager haben eingeschränkten Zugriff:
- Einsehen und Bearbeiten aller Mitglieder und Termine
- Teilnehmerverwaltung bei Terminen
- Keine Systemkonfiguration oder Rollenverwaltung
Check-in Web:
- Login → Dashboard
- Termine und eigene Anwesenheiten einsehen
- Eigene Statistik einsehen
- Anträge erstellen
Check-in Mobile (PWA):
- App auf Smartphone installieren (Browser-Menü → "Zum Startbildschirm")
- Öffnen der App
- QR-Code scannen an TOTP-Station oder manueller Check-in
- Korrekturantrag stellen
Check-in QR-Code:
- QR-Code am Veranstaltungsort scannen (z.B. mit Smartphone-Kamera)
- Link öffnet direkt den Check-in
- Automatische Erfassung
Check-in NFC/IoT (geplant)
- NFC-Tag an NFC-Station halten
- RFID-Karte an Lesegerät
- Fingerabdruck an Fingerprint-Reader
- Automatische Erfassung durch verknüpftes Gerät
Ausnahmen beantragen:
- Dashboard → Meine Anträge
- Neue Ausnahme → Typ wählen (Zeitkorrektur, Entschuldigt)
- Datum angeben und Begründung
- Absenden → Wartet auf Genehmigung durch Admin/Manager
- QR Code Station mit TOTP Code
- NFC Station für TOTP Code (geplant)
- Fingerprint Authentifizierungsgerät (geplant)
Note
(Work in Progress)
Web-Login:
POST /api/api.php&resource=login
Body: { "email": "email", "password": "pass" }
Response: Session-Cookie
Device-Auth:
Header: Authorization: Bearer {token}
Check-in:
POST /api/api.php&resource=totp_checkin
Body: {
"appointment_id": 123,
"member_id": 456,
"source": "nfc",
"totp_code": "123456"
}
Termine abrufen:
GET /api/api.php&resource=appointments&year=2025
Response: Array of appointments
Mitglieder abrufen:
GET /api/api.php&resource=members
Response: Array of members with groups
- HTTPS erforderlich für Produktivbetrieb
- Regelmäßige Updates der Abhängigkeiten
- Starke Passwörter für Admin-Accounts
- TOTP-Secrets sicher aufbewahren
- Device-Tokens niemals im Code hardcoden
- Backup-Strategie für Datenbank implementieren
# XAMPP oder ähnliches installieren
# Projekt nach htdocs/ kopieren
# Datenbank erstellen
# In Browser: http://localhost/EhrenSache/publicEhrenSache/
├── private/ # Interne Dateien
| ├── config/ # Config Dateien
| ├── handlers/ # API Endpunkt-Handler
| └── ...
└── public/ # Öffentlich zugänglich <-- Web Root!
├── checkin/ # PWA
├── api/ # REST API Endpoints
├── js/ # Frontend JavaScript
├── css/ # Stylesheets
├── ...
└── index.html # Hauptanwendung
Das System verwendet ein Jahr-basiertes Caching:
- Termine/Anwesenheiten: Pro Jahr gecacht
- Mitglieder/Gruppen: Global gecacht
- Invalidierung bei Änderungen über Event-System
- Cache-Keys im localStorage
Siehe API Dokumentation
Bei Fragen oder Problemen bitte ein Issue auf GitHub erstellen.
EhrenSache ist unter einer dualen Lizenz verfügbar:
Gemeinnützige Vereine, Musikvereine, Sportvereine und andere ehrenamtliche Organisationen können EhrenSache kostenlos unter der AGPL-3.0-Lizenz nutzen.
Das bedeutet:
- ✅ Kostenlose Nutzung
- ✅ Quellcode einsehbar und anpassbar
- ✅ Selbst-Hosting möglich
⚠️ Änderungen müssen veröffentlicht werden (AGPL-Bedingung)
Für kommerzielle Nutzung ohne Offenlegungspflicht gemäß AGPL ist eine Kommerzielle Lizenz erforderlich.
Wann brauche ich eine kommerzielle Lizenz?
- Du hostest EhrenSache als kostenpflichtige Dienstleistung
- Du integrierst EhrenSache in ein kommerzielles Produkt
- Du möchtest Änderungen NICHT veröffentlichen
- Du verkaufst EhrenSache-basierte Lösungen
Lizenzmodelle:
Wir bieten flexible Einmal- und Jahreslizenzen, abgestimmt auf Ihr
Geschäftsmodell. Kontaktieren Sie uns für ein individuelles Angebot.
Copyright (c) 2026 Martin Maier
Made with ❤️ for the volunteer community