InfraGuard

Navigation · Rollenorientiertes Menü

Das rollenorientierte, datenbankgesteuerte Menü von InfraGuard (infr_sitemap + min_req) — die 8 Rollenbereiche und warum die Rollengrenze zugleich die Berechtigungsgrenze ist.

Übersicht — was es leistet

Die Hauptnavigation von InfraGuard ist eine rollenorientierte Informationsarchitektur (IA): Sie verzweigt zuerst nach Rolle (Arbeitsbereich) und entfaltet sich dann innerhalb jedes Bereichs zu Arbeitsabläufen. Drei Prinzipien:

  1. Das Menü ist datenbankgesteuert, nicht fest verdrahtet. Jeder Menüknoten wird aus der Tabelle infr_sitemap gelesen (anwendungseigen, unabhängig). Nichts ist in Blade eingebacken.
  2. Rollengrenze = Berechtigungsgrenze. Das min_req jedes Knotens (das minimale user_level) ist die Linie der Zugriffskontrolle. Ein Knoten wird nur angezeigt, wenn user_level >= min_req gilt, und dieselbe Regel wird serverseitig auf der Route durchgesetzt (gestaffelte Verteidigung).
  3. Beschriftungen laufen immer über Übersetzungsschlüssel. Der Text auf dem Bildschirm wird über __() / Locales::menuLabel() für alle 8 Sprachen aufgelöst.

Kennzahlen (CPU, Load, 5-Minuten-Fenster, …) sind keine Menüpunkte der obersten Ebene — sie leben als Entitäts-Tabs und Filter innerhalb der einzelnen Bildschirme. Die Aufteilung folgt der Frage „wer (welche Rolle) tut was“, nicht „welche Kennzahl“.

In InfraGuard bedeutet „Domain“ ausschließlich eine Web-TLD (aaa.bbb.com). Die nach Zuständigkeit aufgeteilte Arbeit heißt „Rolle / Bereich“. Die 8 Menüpunkte der obersten Ebene sind genau diese Rollenbereiche.


Wann Sie es verwenden


Aufbau

Das Menü liegt waagerecht in der Kopfleiste (infr-topbar). Von links nach rechts:

Bereich Inhalt
Marke InfraGuard-Logo (Schild + Monitoring-Puls) → führt zur Übersicht (/)
Rollenmenü infr-nav — 8 Rollenbereiche, beim Überfahren öffnet sich ein Panel mit Unterpunkten
Aktionen rechts Umschalter für das mobile Menü · Sprachumschalter · Theme-Umschalter · Benutzermenü

Jeder Punkt der obersten Ebene wird als MDI-Symbol + Beschriftung + (sofern Unterpunkte vorhanden) Chevron gerendert; die Unterpunkte erscheinen in einem Aufklapp-Panel (infr-nav__panel). Stimmt der aktuelle Pfad mit dem href eines Unterpunkts überein, erhält der Punkt der obersten Ebene die Klasse is-active (die Übersicht ist nur aktiv, wenn der Pfad exakt / lautet).

Die 8 Rollenbereiche

Dies ist der Baum der obersten Ebene, den SitemapSeeder aufbaut. Die body_class wird beim Betreten eines Bereichs auf <body> angewendet und begrenzt so den Geltungsbereich der Seitenstile.

# Rollenbereich Zuständig body_class Min. user_level
1 Übersicht gemeinsam infr-overview 1
2 Infrastruktur Infrastrukturbetrieb infr-infra 1
3 Service Servicebetrieb infr-service 1
4 Sicherheit Sicherheitsbetrieb infr-security 2
5 Backup und Wiederherstellung Infrastruktur (ebenfalls) infr-backup 2
6 Assets gemeinsame Referenz (CMDB) infr-asset 1
7 Verwaltung Admin infr-admin 10
8 Entwicklung super_admin infr-dev 9

Unterpunkte je Bereich

Jeder Unterpunkt trägt sein eigenes min_req (meist dasselbe wie beim übergeordneten Punkt, gelegentlich angehoben).

Infrastruktur (min_req 1)

Punkt Pfad min_req
Zustand /infra/health 1
Server /infra/servers 1
Speicher und RAID /infra/storage 1
Port-Verbindungen /infra/traffic/ports 1
IP-Verbindungen /infra/traffic/ips 1
Traffic /infra/traffic/net 1
Alarme /infra/alert 1

Service (min_req 1)

Punkt Pfad min_req
Übersicht /service 1
Web /service/web 1
Datenbank /service/database 1
Sitzungen /service/session 1
Katalog /service/catalog 1
Projekte /service/projects 1
Problemlösung /service/resolution 2

Sicherheit (min_req 2 — alle Punkte 2)

Punkt Pfad
Übersicht /security
Bedrohungen /security/threats
Erkennungen /security/detections
Regelsätze /security/rulesets
Firewall /security/firewall
Sperrliste und Reputation /security/blocklist
Whitelist /security/whitelist
Sicherheitsdiagnose /security/diagnostics
Problemlösung /security/resolution

Backup und Wiederherstellung (min_req 2): Zeitplan-Board /backup/board · Backup-Skripte /backup/scripts · Tresore /backup/vaults · Wiederherstellung und Prüfung /backup/recovery.

Assets (min_req 1): Inventar /asset/inventory · Instanzen /asset/instances · Hardware /asset/hardware · Speicher und Dateien /asset/storage.

Verwaltung (min_req 10 — alle Punkte 10): Benutzer und Rollen /admin/users · Collectors /admin/collectors · Betriebsrichtlinie /admin/ops-policy · API-Schlüssel /admin/api-keys · Regeln und Schwellenwerte /admin/rules · Reputations-API /admin/reputation-providers · KI-Adapter /admin/ai-providers · Mail-Adapter /admin/mail-providers · SMS-Adapter /admin/sms-providers · Lokalisierung /admin/localization · Audit /admin/audit.

Entwicklung (min_req 9 — alle Punkte 9): Dev Overview /dev · Doctor /dev/doctor · Runtime & Leader /dev/leader · Slow Queries/Requests/Jobs/Outgoing · Exceptions · Cache · Servers · Usage · Pulse /pulse · Horizon /horizon.


Vorgehen

Navigieren

Fahren Sie über einen Punkt der obersten Ebene, um sein Panel zu öffnen. Ein Klick auf einen Punkt führt zum Bildschirm und wendet die body_class dieses Bereichs auf <body> an. Auf schmalen Bildschirmen klappt das Hamburger-Symbol oben rechts (data-nav-toggle) das Menü auf.

Was Ihr Level sieht

Bei der Anmeldung synchronisiert die Middleware InfrAuth users.user_level in den Sitzungsschlüssel infr_user_level. Beim Rendern durchläuft Menu::for_user($level) den Baum und blendet rekursiv jeden Knoten mit min_req > your level aus. Zum Beispiel:

Entwicklung (9) und Verwaltung (10) haben unterschiedliche Schwellen. Ein super_admin mit genau Level 9 sieht Entwicklung, aber nicht Verwaltung. Ein Admin (10) sieht beides.

Menü erweitern oder umbauen (Admin/Dev)

Eine Oberfläche zum Bearbeiten des Menüs gibt es noch nicht. Die maßgebliche Quelle des Baums ist der Code (database/seeders/SitemapSeeder.php), und der Seeder löscht bei jedem Lauf alle Zeilen und legt sie neu an (kanonische Resynchronisierung).

# Nach dem Bearbeiten des Baums resynchronisieren (betrifft nur infr_sitemap — Altdaten bleiben unberührt)
php artisan db:seed --class=SitemapSeeder

Der Seeder ruft am Ende Menu::flush() auf, Änderungen wirken also sofort. Zeigt ein neuer Punkt seinen rohen (englischen) Namen, fehlt ihm ein Übersetzungsschlüssel — legen Sie einen in resources/lang/{ko,en}/menu.php nach der Regel Str::slug(name, '_') an (z. B. Storage & RAID → storage_raid).

Führen Sie niemals migrate:fresh aus. InfraGuard teilt sich eine Verbindung mit der alten stats-design-MySQL. Um ausschließlich das Menü zu aktualisieren, verwenden Sie allein db:seed --class=SitemapSeeder.


Datenquellen

Die Tabelle infr_sitemap

Eine unabhängige, anwendungseigene Tabelle (verschieden von der alten, präfixlosen sitemap). Modell: App\Models\Infr\InfrSitemap.

Spalte Bedeutung
parent_id 0 = oberste Ebene, sonst die id des übergeordneten Knotens
seq Sortierreihenfolge unter Geschwistern
depth 0 = Rollenbereich, 1 = Unterpunkt
name roher Name (Quelle des Beschriftungsschlüssels)
href Linkpfad (# = übergeordneter Knoten ohne Link)
icon MDI-Glyphe (z. B. mdi-server)
body_class nur oberste Ebene — <body>-Klasse beim Betreten
is_view 1, um ihn in den Baum aufzunehmen
min_req minimales user_level (Berechtigungsgrenze)

App\Support\Menu — Baumaufbau + Cache

Der Cache speichert den rohen name; übersetzt wird erst beim Rendern über Locales::menuLabel(). Ein Sprachwechsel erfordert daher kein Leeren des Caches. Umgekehrt verlangt das Hinzufügen oder Umbenennen von Knoten einen erneuten Seeder-Lauf (der den Cache leert).

Übersetzung der Beschriftungen

App\Support\Locales::menuLabel($name) schlägt den Schlüssel menu. + Str::slug($name, '_') nach. Existiert der Schlüssel, wird übersetzt, andernfalls kommt der rohe Name zurück (sicherer Fallback). Die Pakete liegen unter resources/lang/{locale}/menu.php.

// Im Rendering (nav.blade.php)
{{ \App\Support\Locales::menuLabel($top['name']) }}
// "Storage & RAID" → __('menu.storage_raid') → "Storage & RAID" (en) / "Speicher und RAID" (de)

Sitzung und Middleware


Zugriff

Level (user_level) Alias Im Menü sichtbar
1 demo/viewer Übersicht · Infrastruktur · Service · Assets (überwiegend lesend)
5 staff + Sicherheit · Backup und Wiederherstellung
9 super_admin + Entwicklung
10 admin + Verwaltung (und Entwicklung)

Zu den Leveldefinitionen siehe RBAC-Level; zur Verwaltung von Rollen und Teams siehe Rollen und Teams.


Fehlersuche und FAQ

Ein Menüpunkt fehlt. Meist ein zu niedriges Level. Prüfen Sie, ob Ihr user_level ≥ dem min_req dieses Knotens ist (siehe die Tabellen oben). Administratoren passen Level unter Benutzer und Teams an.

Ein neu hinzugefügter Menüpunkt zeigt seinen englischen (rohen) Namen. Dem Paket menu.php fehlt ein Übersetzungsschlüssel. Legen Sie ihn nach der Regel Str::slug(name,'_') sowohl in resources/lang/ko/menu.php als auch in en/menu.php an. Fehlt der Schlüssel, funktioniert der Bildschirm mit dem rohen Namen dennoch gefahrlos.

Ich habe den Seeder ausgeführt, aber das Menü hat sich nicht geändert. Möglicherweise ist der Cache veraltet. Der Seeder ruft am Ende Menu::flush() auf, Sie können aber auch php artisan cache:clear versuchen. Ist Redis ausgefallen, weicht Menu pro Anfrage auf build() aus — dann kann das Caching nicht die Ursache sein.

Ich habe die Sprache gewechselt, aber nur die Menübeschriftungen haben sich nicht geändert. Beschriftungen werden beim Rendern aufgelöst und nicht zwischengespeichert. Prüfen Sie, ob die menu.php der Zielsprache den Schlüssel enthält. Falls nicht, kontrollieren Sie Aktivierungs- und Übersetzungsstand auf der Seite Lokalisierung.

Kann jemand einen ausgeblendeten Bildschirm durch Eingabe der URL erreichen? Nein. Auch bei ausgeblendetem Menü liefert die Routen-Middleware (infr.level:N usw.) serverseitig 403 zurück.


Verwandte Themen

역할별로 묶인 상단 내비게이션
역할별로 묶인 상단 내비게이션
오른쪽 끝 계정 메뉴
오른쪽 끝 계정 메뉴