Rechtesystem: Löschen überall in Ändern falten, Gruppen-Tabelle transponieren
- "Ändern" deckt jetzt ausnahmslos überall Löschen mit ab (auch bei Clients) — es gibt kein eigenes *.delete-Recht mehr. Betroffen: devices/switches/credentials/users/groups. - "D" in der Rechtetabelle bedeutet ausschließlich Dashboard-Neustart (devices.restart, PoE-Neustart über das Dashboard-Popup) und existiert nur bei Clients. Automatische Neustarts bei Ausfall (poe.sh) bleiben davon komplett unabhängig. - Gruppen-Rechtetabelle transponiert: Kategorien jetzt als Zeilen, Rechte R(ead)/W(rite)/E(dit)/D(ashboard-Neustart) nebeneinander als Spalten statt untereinander. Deckt sich besser mit dem Legenden-Format und braucht weniger vertikalen Platz. - Neue, einmalig laufende Migration (_migrated_permission_delete_fold_v2) überführt bestehende *.delete-Grants verlustfrei in *.edit, bevor die veralteten Rechte-Zeilen entfernt werden. - Routen (delete_device/delete_switch/delete_credential/delete_user/ delete_group) und die zugehörigen can_delete-Template-Variablen prüfen jetzt einheitlich *.edit statt *.delete. - README-Rechtesystem-Abschnitt und Legende an das neue Tabellen-Layout angepasst. - Live getestet: Kill-Switch, alle 5 Delete-Foldings (mit/ohne Recht), devices.restart-Gating unabhängig von devices.edit, Eskalationsschutz (Admin-Löschschutz, Systemgruppen-Schutz) — alles bestätigt korrekt. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1043,26 +1043,42 @@ select {
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
/* Zweistufiger Rechte-Baum (Gruppen-Detailansicht): eine Zeile pro
|
||||
Top-Level-Bereich (Geräte/Logs/Einstellungen) mit eigenem "Bereich
|
||||
anzeigen"-Kästchen, darunter eingerückt die Unterpunkte. */
|
||||
.permission-area { margin-bottom: 22px; }
|
||||
/* Rechte-Tabelle (Gruppen-Detailansicht): eine kompakte Tabelle pro
|
||||
Top-Level-Bereich (Geräte/Logs/Einstellungen). Erste Zeile = der Bereich
|
||||
selbst "(gesamt)" (nur die R-Spalte aktiv, das ist der Kill-Switch),
|
||||
weitere Zeilen = je ein Unterpunkt (Clients, Switche, ...). Spalten =
|
||||
R/W/E/D nebeneinander (siehe Legende im Seitenkopf). */
|
||||
.permission-area { margin-bottom: 20px; }
|
||||
.permission-area:last-child { margin-bottom: 0; }
|
||||
.permission-area-toggle {
|
||||
font-size: 14.5px;
|
||||
padding-bottom: 8px;
|
||||
margin-bottom: 14px;
|
||||
.permission-table {
|
||||
border-collapse: collapse;
|
||||
font-size: 13px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.permission-table th, .permission-table td {
|
||||
padding: 7px 14px;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid var(--border-soft);
|
||||
}
|
||||
.permission-area-toggle strong { font-weight: 700; }
|
||||
.permission-area-children {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
|
||||
gap: 20px;
|
||||
padding-left: 22px;
|
||||
border-left: 2px solid var(--border-soft);
|
||||
margin-left: 5px;
|
||||
.permission-table th {
|
||||
font-size: 11.5px;
|
||||
font-weight: 650;
|
||||
color: var(--text-faint);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.03em;
|
||||
font-family: var(--font-mono);
|
||||
}
|
||||
.permission-table th:first-child { text-transform: none; font-family: inherit; letter-spacing: normal; }
|
||||
.permission-table td:first-child, .permission-table th:first-child { text-align: left; padding-right: 20px; }
|
||||
.permission-table tbody tr:last-child td { border-bottom: none; }
|
||||
.permission-row-label { color: var(--text-dim); }
|
||||
.permission-table input[type="checkbox"] {
|
||||
width: 16px; height: 16px;
|
||||
accent-color: var(--accent);
|
||||
cursor: pointer;
|
||||
}
|
||||
.permission-table input[type="checkbox"]:disabled { cursor: not-allowed; }
|
||||
.permission-cb-na { opacity: 0.25; accent-color: var(--text-faint) !important; }
|
||||
|
||||
.check-list { display: flex; flex-direction: column; gap: 9px; }
|
||||
.check-row {
|
||||
|
||||
Reference in New Issue
Block a user