feat(admin): extend housekeeping permissions page with groups, presets, audit, test, import/export, rank overview and dependency tracking
Local Build and Deploy / deploy (push) Successful in 1m14s

- Add group_name, depends_on and updated_by columns to website_housekeeping_permissions
- Add migration 0016 for new columns
- Rewrite housekeeping page with 7 tabs: Overview, Manage, Import/Export, Rank overview, Presets, Test, Audit log
- Add permission groups/categories with filtering
- Add bulk JSON import/export
- Add rank overview grouped by permission category
- Add permission presets for Moderator (rank 5), Admin (rank 7), Super Admin (rank 8)
- Add audit logging for all permission changes via AdminAuditLog
- Add test mode to check permissions by rank
- Add dependency tracking with warnings for missing dependencies
- Add overview dashboard with statistics
- Add Dutch and English translations for all new features
This commit is contained in:
openhands committed 2026-07-17 19:02:23 +02:00
1 parent 49d204e85c
commit 98d4b715df
7 files changed
+1636 -220

No files matched your search

+65 -1
View File
@@ -1879,7 +1879,71 @@
"save": "Save permission",
"saving": "Saving…",
"cancel": "Cancel"
}
},
"confirmClearAll": "Delete ALL permissions? This action cannot be undone!",
"colGroup": "Group",
"colDepends": "Depends on",
"colPermission": "Permission",
"colDescription": "Description",
"colMinRank": "Min. Rank",
"permissionKey": "Permission key",
"minRank": "Min. rank",
"description": "Description",
"permissions": "Permissions",
"permissionsCount": "{count} permissions",
"permission": "permission",
"highestMinRank": "Highest min. rank: {rank}",
"totalMinRank": "Total min. rank sum: {total}",
"groupCount": "{count} groups",
"rankCount": "{count} ranks",
"missingDeps": "{count} missing dependencies",
"dependsOn": "depends on",
"notFound": "not found",
"missing": "(missing)",
"rank": "Rank",
"count": "Count",
"searchPermission": "Search permissions…",
"search": "Search",
"manage": "Manage",
"importSelection": "Import selection",
"noGroup": "No group",
"allGroups": "All groups",
"perGroup": "Permissions per group",
"perRank": "Permissions per rank",
"rankOverviewHint": "All permissions grouped by the rank they are assigned to.",
"tabOverview": "Overview",
"tabManage": "Manage",
"tabImport": "Import / Export",
"tabRanks": "Rank overview",
"tabPresets": "Presets",
"tabTest": "Test",
"tabAudit": "Audit log",
"importPermissions": "Import permissions",
"importHint": "Paste a JSON array of permission objects. Format: [{ \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" }]",
"importPlaceholder": "Paste JSON here…",
"import": "Import",
"exportTitle": "Export permissions",
"exportHint": "Export all permissions as JSON for backup or batch editing.",
"export": "Export JSON",
"copy": "Copy",
"copied": "Copied!",
"presets": "Permission presets",
"presetsHint": "Apply a predefined set of permissions for common staff roles.",
"presetModerator": "Moderator",
"presetModeratorDesc": "Basic moderation tools: user lookup, bans, CFH handling, chat logs.",
"presetAdmin": "Administrator",
"presetAdminDesc": "Full admin access: users, rooms, news, settings, shop, events, radio & more.",
"presetSuperAdmin": "Super Admin",
"presetSuperAdminDesc": "Complete access to every feature including permission management and asset import.",
"applyPreset": "Apply preset",
"clearAll": "Clear all permissions",
"testTitle": "Test rank access",
"testHint": "Enter a rank number to see which permissions would be granted.",
"test": "Test",
"auditTitle": "Permission audit log",
"auditHint": "All changes to housekeeping permissions are logged.",
"auditLogsAt": "Audit logs are available on the Audit log page.",
"viewAuditLogs": "View audit logs"
},
"rooms": {
"title": "Rooms",
+65 -1
View File
@@ -1879,7 +1879,71 @@
"save": "Permissie opslaan",
"saving": "Opslaan…",
"cancel": "Annuleren"
}
},
"confirmClearAll": "ALLE permissies verwijderen? Dit kan niet ongedaan worden gemaakt!",
"colGroup": "Groep",
"colDepends": "Afhankelijk van",
"colPermission": "Permissie",
"colDescription": "Omschrijving",
"colMinRank": "Min. rang",
"permissionKey": "Permissiesleutel",
"minRank": "Min. rang",
"description": "Omschrijving",
"permissions": "Permissies",
"permissionsCount": "{count} permissies",
"permission": "permissie",
"highestMinRank": "Hoogste min. rang: {rank}",
"totalMinRank": "Totale min. rang som: {total}",
"groupCount": "{count} groepen",
"rankCount": "{count} rangen",
"missingDeps": "{count} ontbrekende afhankelijkheden",
"dependsOn": "afhankelijk van",
"notFound": "niet gevonden",
"missing": "(ontbreekt)",
"rank": "Rang",
"count": "Aantal",
"searchPermission": "Zoek permissies…",
"search": "Zoeken",
"manage": "Beheer",
"importSelection": "Importeer selectie",
"noGroup": "Geen groep",
"allGroups": "Alle groepen",
"perGroup": "Permissies per groep",
"perRank": "Permissies per rang",
"rankOverviewHint": "Alle permissies gegroepeerd per rang.",
"tabOverview": "Overzicht",
"tabManage": "Beheer",
"tabImport": "Importeren / Exporteren",
"tabRanks": "Rangenoverzicht",
"tabPresets": "Presets",
"tabTest": "Test",
"tabAudit": "Auditlog",
"importPermissions": "Permissies importeren",
"importHint": "Plak een JSON-array met permissie-objecten. Formaat: [{ \"permission\": \"...\", \"minRank\": 7, \"description\": \"...\", \"groupName\": \"...\", \"dependsOn\": \"...\" }]",
"importPlaceholder": "Plak JSON hier…",
"import": "Importeren",
"exportTitle": "Permissies exporteren",
"exportHint": "Exporteer alle permissies als JSON voor backup of bulkbewerking.",
"export": "Exporteer JSON",
"copy": "Kopiëren",
"copied": "Gekopieerd!",
"presets": "Permissie-presets",
"presetsHint": "Pas een vooraf gedefinieerde set permissies toe voor veelvoorkomende staffrollen.",
"presetModerator": "Moderator",
"presetModeratorDesc": "Basis moderatie tools: gebruikers zoeken, bans, CFH afhandeling, chatlogs.",
"presetAdmin": "Administrator",
"presetAdminDesc": "Volledige admin-toegang: gebruikers, kamers, nieuws, instellingen, winkel, events, radio & meer.",
"presetSuperAdmin": "Super Admin",
"presetSuperAdminDesc": "Volledige toegang tot alle functies inclusief permissiebeheer en asset-import.",
"applyPreset": "Pas preset toe",
"clearAll": "Verwijder alle permissies",
"testTitle": "Test rangtoegang",
"testHint": "Voer een rangnummer in om te zien welke permissies zouden worden toegekend.",
"test": "Test",
"auditTitle": "Permissie auditlog",
"auditHint": "Alle wijzigingen aan housekeeping permissies worden gelogd.",
"auditLogsAt": "Auditlogs zijn beschikbaar op de Auditlog-pagina.",
"viewAuditLogs": "Bekijk auditlogs"
},
"rooms": {
"title": "Kamers",