Initial commit of the Asset Management System, including project structure, Docker configuration, database migrations, and core application files. Added user authentication, asset management features, and basic UI components.
This commit is contained in:
336
README.md
336
README.md
@@ -1,3 +1,335 @@
|
||||
# ai-zensur
|
||||
# Asset Management System
|
||||
|
||||
Ein Tool um Daten aus Dokumenten für weitere KI Verarbeitung vorzubereiten.
|
||||
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 <repository-url>
|
||||
cd asset-management
|
||||
```
|
||||
|
||||
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)
|
||||
Reference in New Issue
Block a user