335 lines
9.7 KiB
Markdown
335 lines
9.7 KiB
Markdown
# 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
|
|
|
|
1. **Repository klonen**
|
|
```bash
|
|
git clone https://git.send.nrw/MrSphay/Inventory.git
|
|
cd Inventory
|
|
```
|
|
|
|
2. **Umgebungsvariablen konfigurieren**
|
|
```bash
|
|
cp env.example .env
|
|
# Bearbeiten Sie .env nach Ihren Bedürfnissen
|
|
```
|
|
|
|
3. **Anwendung starten**
|
|
```bash
|
|
docker compose up -d --build
|
|
```
|
|
|
|
4. **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)
|
|
|
|
```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
|
|
1. **Asset erstellen**: Klicken Sie auf "Neues Asset" und füllen Sie alle Felder aus
|
|
2. **Asset bearbeiten**: Klicken Sie auf das Bearbeiten-Symbol bei einem Asset
|
|
3. **Asset zuweisen**: Verwenden Sie die Zuweisungs-Funktion für Benutzer
|
|
4. **Dateien anhängen**: Laden Sie Dokumente, Bilder oder andere Dateien hoch
|
|
5. **Etiketten drucken**: Generieren Sie QR/Barcode-Etiketten für Assets
|
|
|
|
### Inventur
|
|
1. **Inventur starten**: Erstellen Sie einen neuen Inventurdurchlauf
|
|
2. **Assets scannen**: Verwenden Sie die Scan-Funktion mit Inventarnummer oder QR-Code
|
|
3. **Status erfassen**: Markieren Sie Assets als gefunden, nicht gefunden, defekt oder verschoben
|
|
4. **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
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# Alle Services
|
|
docker compose logs
|
|
|
|
# Spezifischer Service
|
|
docker compose logs php
|
|
docker compose logs nginx
|
|
docker compose logs db
|
|
```
|
|
|
|
### Datenbank-Migrationen
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# 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
|
|
|
|
1. **Controller erstellen**: Erben Sie von `BaseController`
|
|
2. **Model erstellen**: Verwenden Sie PDO mit Prepared Statements
|
|
3. **View erstellen**: PHP-Template mit Layout-System
|
|
4. **Route hinzufügen**: In `config/routes.php` definieren
|
|
5. **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**
|
|
```bash
|
|
# Services Status prüfen
|
|
docker compose ps
|
|
|
|
# Logs prüfen
|
|
docker compose logs nginx
|
|
docker compose logs php
|
|
```
|
|
|
|
**Datenbank-Verbindung fehlgeschlagen**
|
|
```bash
|
|
# Datenbank-Container Status
|
|
docker compose logs db
|
|
|
|
# Datenbank-Verbindung testen
|
|
docker compose exec db mysql -u inventory -p
|
|
```
|
|
|
|
**Upload-Fehler**
|
|
```bash
|
|
# 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**
|
|
```bash
|
|
# 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:
|
|
|
|
1. **Logs prüfen**: `docker compose logs`
|
|
2. **Dokumentation**: Diese README-Datei
|
|
3. **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) |