From 0fcb7dc9f847daf636bb0edfb1170a9c9811c4e8 Mon Sep 17 00:00:00 2001 From: stephan Date: Mon, 13 Jul 2026 12:31:22 -0400 Subject: [PATCH] Add access control for kit management in event administration. Introduce the function `fxAdminCanEditEveAccesKits` to validate user permissions based on email or login. Update event access page to restrict modification actions and enhance UI feedback for non-editable states, aligning with MSIN-4401 requirements for improved event management functionality. --- php/inc_fonctions_sl.php | 38 +++++++++++++++++++++++++ superadm/eve_acces.php | 20 +++++++++++++ superadm/php/inc_fx_eve_acces_admin.php | 38 ++++++++++++++++++++++--- 3 files changed, 92 insertions(+), 4 deletions(-) diff --git a/php/inc_fonctions_sl.php b/php/inc_fonctions_sl.php index 8253bc0..bcd0ef6 100644 --- a/php/inc_fonctions_sl.php +++ b/php/inc_fonctions_sl.php @@ -194,6 +194,44 @@ function fxAdminCanUsePermInspectTools() { return !empty($_SESSION['usa_id']); } +/** + * MSIN-4401 — Créer / modifier / supprimer les définitions de kits (pas l'assignation). + * Liste blanche courriel ou login (session usa_info = inscriptions_comptes). + */ +function fxAdminCanEditEveAccesKits() { + if (empty($_SESSION['usa_id']) || empty($_SESSION['usa_info']) || !is_array($_SESSION['usa_info'])) { + return false; + } + + static $arrAllow = array( + 'stephan@progiweb.ca', + ); + + $arrNorm = array(); + foreach ($arrAllow as $strItem) { + $strItem = strtolower(trim((string)$strItem)); + if ($strItem !== '') { + $arrNorm[$strItem] = true; + } + } + if (count($arrNorm) === 0) { + return false; + } + + $arrCandidates = array( + strtolower(trim((string)($_SESSION['usa_info']['com_courriel'] ?? ''))), + strtolower(trim((string)($_SESSION['usa_info']['com_login'] ?? ''))), + ); + + foreach ($arrCandidates as $strCand) { + if ($strCand !== '' && isset($arrNorm[$strCand])) { + return true; + } + } + + return false; +} + function fxAdminPermInspectModeActive() { return fxAdminCanUsePermInspectTools() && !empty($_SESSION['ms1_perm_inspect_mode']); } diff --git a/superadm/eve_acces.php b/superadm/eve_acces.php index 663ffbf..4b675ab 100644 --- a/superadm/eve_acces.php +++ b/superadm/eve_acces.php @@ -20,6 +20,16 @@ $strError = ''; $intRoleId = isset($_GET['id']) ? intval($_GET['id']) : 0; if (isset($_GET['action'])) { + switch ($_GET['action']) { + case 'duplicate': + case 'toggle': + case 'delete': + if (!fxAdminCanEditEveAccesKits()) { + header('Location: eve_acces.php?p=kits&err=' . urlencode('Modification des kits réservée.')); + exit; + } + break; + } switch ($_GET['action']) { case 'duplicate': if ($intRoleId <= 0) { @@ -60,6 +70,10 @@ if (isset($_GET['action'])) { } if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['action'] ?? '') === 'save_kit') { + if (!fxAdminCanEditEveAccesKits()) { + header('Location: eve_acces.php?p=kits&err=' . urlencode('Modification des kits réservée.')); + exit; + } $intRoleId = intval($_POST['role_id'] ?? 0); $arrResult = fxEveAccesAdminSaveRole($_POST, $_POST['perm_keys'] ?? array()); if ($arrResult['state'] === 'ok') { @@ -119,6 +133,12 @@ include('inc_header.php'); if ($strFlash !== '' && $strError === '') { echo '
' . htmlspecialchars($strFlash, ENT_QUOTES, 'UTF-8') . '
'; } + // MSIN-4401 — Nouveau kit réservé aux éditeurs ; lecture seule pour les autres. + if ($intRoleId <= 0 && !fxAdminCanEditEveAccesKits()) { + echo '
Création de kit réservée. Vous pouvez consulter les kits existants.
'; + fxEveAccesAdminRenderKitsList(''); + break; + } fxEveAccesAdminRenderKitForm($intRoleId, $strError); break; case 'assignations': diff --git a/superadm/php/inc_fx_eve_acces_admin.php b/superadm/php/inc_fx_eve_acces_admin.php index edd6715..b9dcf3d 100644 --- a/superadm/php/inc_fx_eve_acces_admin.php +++ b/superadm/php/inc_fx_eve_acces_admin.php @@ -5,6 +5,9 @@ */ require_once dirname(__DIR__, 2) . '/php/inc_fx_eve_acces.php'; +if (!function_exists('fxAdminCanEditEveAccesKits')) { + require_once dirname(__DIR__, 2) . '/php/inc_fonctions_sl.php'; +} function fxEveAccesAdminHasDelegableColumn() { @@ -677,16 +680,25 @@ function fxEveAccesAdminRenderKitsList($strFlash = '') $blnActifOnly = isset($_GET['actif']) && $_GET['actif'] === '1'; $arrRoles = fxEveAccesAdminGetRolesForList($blnActifOnly); + $blnCanEditKits = fxAdminCanEditEveAccesKits(); if ($strFlash !== '') { echo '
' . htmlspecialchars($strFlash, ENT_QUOTES, 'UTF-8') . '
'; } ?>

Kits d'accès

+ Nouveau kit +
+ +
+ Lecture seule : vous pouvez consulter les kits. Création / modification réservées. + L’assignation aux comptes reste disponible sur la fiche compte. +
+
-

0 ? 'Modifier le kit' : 'Nouveau kit' ?>

+

0 ? 'Modifier le kit' : 'Nouveau kit'; + } + ?>

+ +
Lecture seule — vous ne pouvez pas modifier ce kit.
+ -
+ > + >
Identité
@@ -1039,6 +1066,7 @@ function fxEveAccesAdminRenderKitForm($intRoleId, $strError = '')
+ @@ -1053,6 +1081,8 @@ function fxEveAccesAdminRenderKitForm($intRoleId, $strError = '') + + 0) {