2025-08-22 18:36:09 +00:00

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

    git clone https://git.send.nrw/MrSphay/Inventory.git
    cd Inventory
    
  2. Umgebungsvariablen konfigurieren

    cp env.example .env
    # Bearbeiten Sie .env nach Ihren Bedürfnissen
    
  3. Anwendung starten

    docker compose up -d --build
    
  4. Auf Anwendung zugreifen

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

  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

# 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

  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

# 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:

  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)
Description
Ein Tool um alles im Blick zu halten.
Readme GPL-2.0 95 KiB
Languages
PHP 80.8%
JavaScript 11%
CSS 7.7%
Shell 0.5%