Policies: Zuweisungen sichtbar, Ergebnis-Report, Post-Import-Parität (#1 #4 #5)

- #1 Spalte "Zuweisungen" in der Policy-Liste (Anzahl); Klick öffnet eine
  Detailansicht mit den konkreten Include-/Exclude-Gruppen und Alle Geräte/
  Benutzer. Get-GraphPolicyList lädt jetzt $expand=assignments und löst
  Gruppennamen in einem Bulk-Lookup (Resolve-GroupNamesBulk) auf.
- #4 Bulk-Zuweisung zeigt statt nur eines Toasts einen Ergebnis-Report pro
  Policy (zugewiesen / übersprungen / Fehler) und lädt die Liste neu.
- #5 Post-Import-Zuweisung erhält Alle Geräte/Alle Benutzer (Parität zur
  Bulk-Zuweisung) und nutzt dieselbe Ergebnisansicht.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-09-16 12:23:10 +02:00
co-authored by Claude Opus 4.8
parent a7c8e88793
commit 9fb42b4d7e
4 changed files with 182 additions and 23 deletions
+21
View File
@@ -5579,6 +5579,7 @@ body.read-only .app-row {
.pol-assign-dropdown .opt:hover { background: var(--hover, rgba(255,255,255,.06)); }
.pol-assign-dropdown .opt .desc { font-size: 11px; color: var(--text-dim, #888); margin-top: 1px; }
.pol-assign-dropdown .msg { padding: 8px 10px; font-size: 12px; color: var(--text-dim, #888); }
.pol-assign-builtin { margin-top: 10px; }
/* Bulk-Zuweisung: Policy-Liste + Modus */
.pol-bulk-names { display: flex; flex-wrap: wrap; gap: 6px; max-height: 120px; overflow-y: auto; }
@@ -5592,6 +5593,26 @@ body.read-only .app-row {
.pol-bulk-radio input { margin-top: 2px; }
.pol-bulk-builtin .lbl { display: block; font-size: 12px; font-weight: 600; margin-bottom: 6px; color: var(--text-dim, #888); }
.pol-bulk-check { display: inline-flex; align-items: center; gap: 6px; margin-right: 18px; font-size: 13px; cursor: pointer; }
/* Zuweisungs-Spalte + Detailansicht */
.pol-asg-badge {
min-width: 24px; padding: 1px 8px; border: 1px solid var(--hairline, #333);
border-radius: var(--r-pill, 999px); background: var(--bg3, var(--hover));
color: var(--ink, inherit); font-size: 12px; font-weight: 600; cursor: pointer;
}
.pol-asg-badge:hover { border-color: var(--accent, #60a5fa); color: var(--accent, #60a5fa); }
.pol-av-group .lbl { display: block; font-size: 12px; font-weight: 600; margin-bottom: 6px; color: var(--text-dim, #888); }
/* Ergebnis-Report der Zuweisung */
.pol-result-list { max-height: 50vh; overflow-y: auto; }
.pol-res-row { display: flex; align-items: center; gap: 10px; padding: 6px 0; border-bottom: 1px solid var(--hairline-soft, rgba(255,255,255,.06)); font-size: 13px; }
.pol-res-row:last-child { border-bottom: 0; }
.pol-res-name { font-weight: 500; }
.pol-res-msg { color: #f87171; font-size: 12px; margin-left: auto; text-align: right; }
.pol-res-badge { flex: none; font-size: 11px; font-weight: 600; padding: 2px 8px; border-radius: var(--r-pill, 999px); }
.pol-res-badge.ok { background: rgba(74,222,128,.15); color: #4ade80; }
.pol-res-badge.err { background: rgba(248,113,113,.15); color: #f87171; }
.pol-res-badge.skip { background: var(--hairline-soft); color: var(--muted, #999); }
.pol-res-ok { color: #4ade80; }
.pol-res-err { color: #f87171; }
/* =============================================================
Multi-Tenant: Topbar-Umschalter + Profil-Editor