From b4a85a28a5dc672d44cd45ee4fd8ae25efdfe17f Mon Sep 17 00:00:00 2001 From: Jukka Lampikoski Date: Fri, 13 Mar 2026 15:16:04 +0200 Subject: [PATCH] Group users by company + allow admins to set user/admin role - Superadmin sees users grouped by company with header rows - Admins can now set user or admin role when creating/editing users - Admin role change restricted to own company only - Prevents admin from modifying superadmin roles Co-Authored-By: Claude Opus 4.6 --- api.php | 14 ++++--- index.html | 7 ++++ script.js | 107 ++++++++++++++++++++++++++++++++++++++++++----------- 3 files changed, 102 insertions(+), 26 deletions(-) diff --git a/api.php b/api.php index cda5b7a..49f2f2e 100644 --- a/api.php +++ b/api.php @@ -1919,9 +1919,10 @@ switch ($action) { } } } elseif (!$isSA) { - // Admin luo käyttäjiä vain omaan yritykseensä -> oletusrooli user + // Admin luo käyttäjiä omaan yritykseensä — voi valita admin tai user $myCompanyId = $_SESSION['company_id'] ?? ''; - $companyRoles[$myCompanyId] = 'user'; + $requestedRole = $input['company_roles'][$myCompanyId] ?? 'user'; + $companyRoles[$myCompanyId] = in_array($requestedRole, ['admin', 'user']) ? $requestedRole : 'user'; } $newUser = [ 'id' => generateId(), @@ -1982,9 +1983,12 @@ switch ($action) { if (isset($input['company_roles']) && is_array($input['company_roles'])) { $companyRoles = $u['company_roles'] ?? []; foreach ($input['company_roles'] as $cid => $crole) { - if (in_array($cid, $u['companies'] ?? []) && in_array($crole, ['admin', 'user'])) { - $companyRoles[$cid] = $crole; - } + if (!in_array($cid, $u['companies'] ?? []) || !in_array($crole, ['admin', 'user'])) continue; + // Admin voi muuttaa vain oman yrityksensä rooleja + if (!$isSA && $cid !== $myCompanyId) continue; + // Admin ei voi muuttaa superadminin roolia + if (!$isSA && ($u['role'] === 'superadmin')) continue; + $companyRoles[$cid] = $crole; } $u['company_roles'] = $companyRoles; } diff --git a/index.html b/index.html index e9d26e8..f098247 100644 --- a/index.html +++ b/index.html @@ -2133,6 +2133,13 @@
+