diff --git a/partials/landingpages/modules/access.php b/partials/landingpages/modules/access.php index 99bafb2..8fed0e9 100644 --- a/partials/landingpages/modules/access.php +++ b/partials/landingpages/modules/access.php @@ -12,16 +12,50 @@ if (!$module) { } if ($_SERVER['REQUEST_METHOD'] === 'POST') { + $selectedUsers = is_array($_POST['auth_user_values'] ?? null) ? $_POST['auth_user_values'] : []; + $selectedGroups = is_array($_POST['auth_group_values'] ?? null) ? $_POST['auth_group_values'] : []; + $manualUsers = (string)($_POST['auth_users'] ?? ''); + $manualGroups = (string)($_POST['auth_groups'] ?? ''); + modules()->saveAuth($moduleName, [ 'required' => isset($_POST['auth_required']), - 'users' => (string)($_POST['auth_users'] ?? ''), - 'groups' => (string)($_POST['auth_groups'] ?? ''), + 'users' => array_merge($selectedUsers, preg_split('/[,\\n]+/', $manualUsers) ?: []), + 'groups' => array_merge($selectedGroups, preg_split('/[,\\n]+/', $manualGroups) ?: []), ]); $notice = 'Zugriff gespeichert.'; $module = modules()->get($moduleName) ?: $module; } $authConfig = is_array($module['auth'] ?? null) ? $module['auth'] : ['required' => false, 'users' => [], 'groups' => []]; +$allowedUsers = is_array($authConfig['users'] ?? null) ? array_values(array_filter(array_map('strval', $authConfig['users']))) : []; +$allowedGroups = is_array($authConfig['groups'] ?? null) ? array_values(array_filter(array_map('strval', $authConfig['groups']))) : []; +$knownUsers = modules()->knownAuthUsers(); +$knownGroups = modules()->knownAuthGroups(); +$currentUser = auth_user(); +if (is_array($currentUser) && trim((string)($currentUser['sub'] ?? '')) !== '') { + $currentSub = (string)$currentUser['sub']; + $hasCurrentUser = false; + foreach ($knownUsers as $knownUser) { + if ((string)($knownUser['sub'] ?? '') === $currentSub) { + $hasCurrentUser = true; + break; + } + } + if (!$hasCurrentUser) { + $knownUsers[] = [ + 'sub' => $currentSub, + 'username' => (string)($currentUser['username'] ?? ''), + 'email' => (string)($currentUser['email'] ?? ''), + 'name' => (string)($currentUser['name'] ?? ''), + 'groups' => is_array($currentUser['groups'] ?? null) ? $currentUser['groups'] : [], + ]; + } +} +$knownGroups = array_values(array_unique(array_merge($knownGroups, auth_groups()))); +sort($knownGroups, SORT_NATURAL | SORT_FLAG_CASE); +$knownUserValues = array_column($knownUsers, 'sub'); +$manualUsers = array_values(array_filter($allowedUsers, fn (string $value): bool => !in_array($value, $knownUserValues, true))); +$manualGroups = array_values(array_filter($allowedGroups, fn (string $value): bool => !in_array($value, $knownGroups, true))); ?>
Zugriff
@@ -40,15 +74,48 @@ $authConfig = is_array($module['auth'] ?? null) ? $module['auth'] : ['required' Login fuer dieses Modul erforderlich -