Split Admin module into Status and User Management under one sidemenu dropdown
Playwright Tests / test (push) Canceled after 0s

Splits fn=admin into two independent modules: the original status
dashboard stays at fn=admin, user management moves to a new fn=usr
(IntranetController.AdminUsers.cs, fis.usr.js). Both are now reached
through a single "Administration" sidemenu dropdown (Systemüberwachung /
Benutzerverwaltung) gated by one shared fds_sys > 4 check, per ADR 0015
(supersedes 0014's "fold into one module" choice).

Also fixes the password-reset validation to check only a plain 6-char
minimum instead of silently also requiring ValidatePassword's default
2-uppercase/2-lowercase/2-digit composition, which contradicted the
"mind. 6 Zeichen" message shown to the admin.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-09 12:09:44 +02:00
co-authored by Claude Sonnet 5
parent 93004904af
commit 076290cbeb
27 changed files with 951 additions and 598 deletions
+15 -7
View File
@@ -11,15 +11,23 @@
]);
})();
/* The Administration module is restricted to users whose fds_sys authorization exceeds 4.
The button is added — and only then does clicking it load the module script — after the
asynchronous auth check resolves, so lower-privileged users never see it or fetch the code.
/* "Administration" is a single sidemenu dropdown (ocmsmenu supports nested items via `itm`)
containing two buttons — Benutzerverwaltung (fn=usr) and Systemüberwachung (fn=admin) — both
restricted to users whose fds_sys authorization exceeds 4. One auth check gates the whole
dropdown; it (and therefore both module scripts) is only added after that check resolves, so
lower-privileged users never see it or fetch either module's code.
Called from fis_main_go.js once the DOM (and the initial main menu) is ready. */
$fis.addAdminMenuIfAuthorized = function () {
if ($('#m_admin').length > 0) { return; } // idempotent
$fis.addAdminMenuButtonsIfAuthorized = function () {
if ($('#m_admin_grp').length > 0) { return; } // idempotent
$fis.getAuth('fds_sys').then(function (auth) {
if ((auth || -1) > 4 && $('#m_admin').length === 0) {
$ocms.ocmsmenu.push({ lbl: $t.m_admin, id: 'm_admin', fnc: 'init:admin', ico: 'glyphicon glyphicon-cog' });
if ((auth || -1) > 4 && $('#m_admin_grp').length === 0) {
$ocms.ocmsmenu.push({
lbl: $t.m_admin, id: 'm_admin_grp', ico: 'glyphicon glyphicon-cog',
itm: [
{ lbl: $t.m_usr, id: 'm_usr', fnc: 'init:usr', ico: 'glyphicon glyphicon-user' },
{ lbl: $t.m_admin_status, id: 'm_admin', fnc: 'init:admin', ico: 'glyphicon glyphicon-dashboard' }
]
});
/* Re-render the main menu cleanly: drop the previously generated menu list
(never the .nav-right settings dropdown) and rebuild it from the array. */
$('#mainmenu').children('ul:not(.nav-right)').remove();