28834ed6d2dba71e0d0e74d5071700fb844f9b8c
Asset Management System
Ein vollwertiges Inventar- und Asset-Management-System entwickelt mit PHP, MySQL und Docker.
Features
🔐 Benutzer & Rollen
- Benutzerverwaltung: Anlegen, Bearbeiten, Deaktivieren von Benutzern
- Rollen: Admin, Auditor, Mitarbeiter mit unterschiedlichen Berechtigungen
- Authentifizierung: Sichere Login/Logout mit Passwort-Hashing (Argon2id)
- Passwort-Reset: E-Mail-basierter Passwort-Reset mit Token
- Sitzungsmanagement: Sichere Cookies mit HttpOnly und SameSite=Strict
📦 Assets / Inventar
- Vollständiges CRUD: Erstellen, Lesen, Aktualisieren, Löschen von Assets
- Detaillierte Felder: Inventarnummer, Bezeichnung, Kategorie, Standort, Abteilung, Lieferant, Anschaffungsdatum, Preis, Zustand, Seriennummer, Garantie, Kostenstelle, Status, Notizen
- Lebenszyklus: Zuweisung an Benutzer, Check-in/Check-out, Historie
- Dateianhänge: Upload und Download von Dokumenten pro Asset
- Etikettendruck: PDF-Labels mit QR/Barcode für Inventarnummer + Bezeichnung
- Erweiterte Suche: Nach Standort, Kategorie, Zustand, Status, Volltext
🏢 Stammdaten
- Kategorien: Verwaltung von Asset-Kategorien
- Standorte: Verwaltung von Standorten mit Adressen
- Abteilungen: Verwaltung von Abteilungen mit Kostenstellen
📊 Inventur & Zählungen
- Inventurdurchläufe: Starten, Offene Positionen, Abgleich Ist/Soll
- Erfassung: Per Eingabe Inventarnummer/QR-Code
- Abschlussbericht: PDF mit Differenzen und Statistiken
📈 Berichte & Export
- Verschiedene Reports: Aktive Assets, nach Standort, nach Kategorie, ausgemusterte Geräte, Garantie läuft ab
- Export-Formate: CSV (Pflicht), XLSX (optional), PDF
- CSV-Import: Mit Validierung, Vorschau, Duplikat-Erkennung, transaktionale Übernahme
🔍 Protokollierung & Nachvollziehbarkeit
- Audit-Log: Vollständige Protokollierung aller CRUD-Aktionen
- Historie: Wer/was/wann geändert wurde
- Nachverfolgung: Komplette Änderungshistorie pro Asset
🌍 Internationalisierung
- Mehrsprachig: Deutsch (Standard), Englisch
- Benutzer-spezifisch: Umschaltbar pro Benutzer
- PHP-Array-basiert: Einfache Übersetzungsstruktur
🎨 UI/UX
- Responsive Design: Optimiert für Desktop, Tablet und Mobile
- Barrierefrei: Basis-WCAG-Konformität
- Klare Navigation: Dashboard, Assets, Inventur, Berichte, Stammdaten, Benutzer, Einstellungen
- Tabellen: Mit Paginierung, Sortierung (serverseitig), Filterfeldern
- Druckfreundlich: Optimierte Styles für Berichte und Etiketten
Technische Architektur
🏗️ MVC-ähnliche Struktur
- Front-Controller:
public/index.php - Router: Einfaches URL-Routing mit Parameter-Extraktion
- Controller: Geschäftslogik und Request-Handling
- Models: Datenzugriff mit PDO und Prepared Statements
- Views: PHP-Templates mit Layout-System
🔒 Sicherheit
- CSRF-Schutz: Token-basiert für alle POST-Formulare
- XSS-Schutz: HTML-Escaping bei Ausgabe
- SQL-Injection-Schutz: Prepared Statements überall
- Upload-Validierung: Whitelist-MIME, Größenlimit, sichere Speicherung
- Rate-Limiting: IP-basiert für Login-Versuche
- Rollenbasierte Zugriffskontrolle: Middleware auf Controller-Ebene
🚀 Leistung
- Indizes: Optimierte Datenbank-Indizes
- Pagination: Serverseitige Paginierung
- Caching: File-basiertes Caching für Stammdaten
- OPcache: PHP-Bytecode-Caching aktiviert
Installation & Setup
Voraussetzungen
- Docker und Docker Compose
- Mindestens 4GB RAM
- 2GB freier Speicherplatz
Schnellstart
-
Repository klonen
git clone https://git.send.nrw/MrSphay/Inventory.git cd Inventory -
Umgebungsvariablen konfigurieren
cp env.example .env # Bearbeiten Sie .env nach Ihren Bedürfnissen -
Anwendung starten
docker compose up -d --build -
Auf Anwendung zugreifen
- Hauptanwendung: http://localhost:8080
- phpMyAdmin: http://localhost:8081
Standard-Anmeldedaten
- E-Mail: admin@example.com
- Passwort: Admin!234
- ⚠️ Wichtig: Ändern Sie das Passwort beim ersten Login!
Konfiguration
Umgebungsvariablen (.env)
# Application Settings
APP_ENV=production
APP_URL=http://localhost:8080
APP_DEBUG=false
APP_KEY=base64:your-secret-key-here
# Database Settings
DB_HOST=db
DB_PORT=3306
DB_NAME=inventory
DB_USER=inventory
DB_PASS=changeMe
DB_ROOT_PASS=rootPassword123
# Session Settings
SESSION_SECURE=false
SESSION_LIFETIME=3600
# File Upload Settings
UPLOAD_MAX_SIZE=50M
ALLOWED_FILE_TYPES=pdf,jpg,jpeg,png,gif,doc,docx,xls,xlsx
# Security Settings
CSRF_TOKEN_LIFETIME=3600
PASSWORD_MIN_LENGTH=8
LOGIN_MAX_ATTEMPTS=5
LOGIN_LOCKOUT_TIME=900
Docker Services
- nginx: Web-Server (Port 8080)
- php: PHP-FPM 8.2 mit allen Extensions
- mysql: MySQL 8.0 Datenbank (Port 3306)
- phpmyadmin: Datenbank-Verwaltung (Port 8081)
Verwendung
Dashboard
Das Dashboard zeigt eine Übersicht über:
- Gesamtzahl der Assets
- Aktive vs. ausgemusterte Assets
- Gesamtwert des Inventars
- Letzte Aktivitäten
- Assets mit ablaufender Garantie
- Offene Inventuren
Asset-Verwaltung
- Asset erstellen: Klicken Sie auf "Neues Asset" und füllen Sie alle Felder aus
- Asset bearbeiten: Klicken Sie auf das Bearbeiten-Symbol bei einem Asset
- Asset zuweisen: Verwenden Sie die Zuweisungs-Funktion für Benutzer
- Dateien anhängen: Laden Sie Dokumente, Bilder oder andere Dateien hoch
- Etiketten drucken: Generieren Sie QR/Barcode-Etiketten für Assets
Inventur
- Inventur starten: Erstellen Sie einen neuen Inventurdurchlauf
- Assets scannen: Verwenden Sie die Scan-Funktion mit Inventarnummer oder QR-Code
- Status erfassen: Markieren Sie Assets als gefunden, nicht gefunden, defekt oder verschoben
- Inventur abschließen: Generieren Sie einen Abschlussbericht mit Differenzen
Berichte
- Asset-Berichte: Nach verschiedenen Kriterien gefiltert
- Garantie-Berichte: Assets mit ablaufender Garantie
- Standort-Berichte: Assets nach Standort gruppiert
- Export-Funktionen: CSV, Excel, PDF-Export
Backup & Restore
Datenbank-Backup
# Backup erstellen
docker compose exec db mysqldump -u root -p inventory > backup_$(date +%Y%m%d_%H%M%S).sql
# Backup wiederherstellen
docker compose exec -T db mysql -u root -p inventory < backup_file.sql
Uploads-Backup
# Uploads-Ordner sichern
tar -czf uploads_backup_$(date +%Y%m%d_%H%M%S).tar.gz storage/uploads/
# Uploads wiederherstellen
tar -xzf uploads_backup_file.tar.gz
Wartung
Logs anzeigen
# Alle Services
docker compose logs
# Spezifischer Service
docker compose logs php
docker compose logs nginx
docker compose logs db
Datenbank-Migrationen
# Migrationen manuell ausführen
docker compose exec php php scripts/migrate.php
# Seeder manuell ausführen
docker compose exec php php scripts/seed.php
Cache leeren
# Storage-Cache leeren
docker compose exec php rm -rf storage/cache/*
Entwicklung
Projektstruktur
asset-management/
├── app/
│ ├── Controllers/ # Controller-Klassen
│ ├── Models/ # Datenmodelle
│ ├── Views/ # PHP-Templates
│ ├── Services/ # Geschäftslogik
│ ├── Middleware/ # HTTP-Middleware
│ ├── Helpers/ # Hilfsfunktionen
│ └── Core/ # Framework-Core
├── config/ # Konfigurationsdateien
├── database/
│ ├── migrations/ # Datenbank-Migrationen
│ └── seeds/ # Testdaten
├── public/ # Web-Root
│ ├── assets/ # CSS, JS, Bilder
│ └── index.php # Front-Controller
├── storage/ # Uploads, Logs, Cache
├── lang/ # Übersetzungsdateien
├── scripts/ # CLI-Skripte
├── docker-compose.yml # Docker-Konfiguration
└── README.md # Diese Datei
Neue Features hinzufügen
- Controller erstellen: Erben Sie von
BaseController - Model erstellen: Verwenden Sie PDO mit Prepared Statements
- View erstellen: PHP-Template mit Layout-System
- Route hinzufügen: In
config/routes.phpdefinieren - Migration erstellen: Für Datenbankänderungen
Code-Standards
- PSR-4: Autoloading-Standard
- PSR-12: Coding Style
- Prepared Statements: Für alle Datenbankabfragen
- CSRF-Schutz: Für alle POST-Requests
- Audit-Logging: Für alle CRUD-Operationen
Troubleshooting
Häufige Probleme
Anwendung nicht erreichbar
# Services Status prüfen
docker compose ps
# Logs prüfen
docker compose logs nginx
docker compose logs php
Datenbank-Verbindung fehlgeschlagen
# Datenbank-Container Status
docker compose logs db
# Datenbank-Verbindung testen
docker compose exec db mysql -u inventory -p
Upload-Fehler
# Berechtigungen prüfen
docker compose exec php ls -la storage/uploads/
# Berechtigungen korrigieren
docker compose exec php chown -R www-data:www-data storage/
Performance-Probleme
# OPcache Status prüfen
docker compose exec php php -m | grep opcache
# Cache leeren
docker compose exec php php -r "opcache_reset();"
Support
Bei Problemen oder Fragen:
- Logs prüfen:
docker compose logs - Dokumentation: Diese README-Datei
- Issues: GitHub Issues verwenden
Lizenz
Dieses Projekt steht unter der MIT-Lizenz. Siehe LICENSE-Datei für Details.
Changelog
Version 1.0.0
- Initiale Version
- Vollständige Asset-Verwaltung
- Inventur-System
- Benutzer- und Rollenverwaltung
- Berichte und Export-Funktionen
- Docker-Integration
- Mehrsprachigkeit (DE/EN)
Languages
PHP
80.8%
JavaScript
11%
CSS
7.7%
Shell
0.5%