Enhance access control for super admin actions by adding validation for report preferences and question approvals. Update action handling to include new permissions for 'actif' and 'validequestion', ensuring proper session checks and error responses. Refactor action array for clarity. Increment version code to reflect these changes.

This commit is contained in:
2026-07-13 19:26:34 -04:00
parent 899ba89a2b
commit 1f7a92c8ea

View File

@ -14,15 +14,23 @@ else
$action = 'Aucune action définie';
// MSIN-4401 — Actions autorisées en session compte promoteur (com_info), sans usa_id :
// - prefs rapport chrono (chksave / trie / groupe)
// - bascule « dossard récupéré » (remis) depuis le site promoteur / gestion V2
// prefs rapport, dossard récupéré (remis), validation questions, toggles listes rapports (actif).
// Les autres actions restent réservées au canal superadm (usa_id).
if (session_status() !== PHP_SESSION_ACTIVE) {
session_start();
}
$intComCompte = intval($_SESSION['com_info']['com_id'] ?? ($_SESSION['com_id'] ?? 0));
$tabCompteActions = array('chksave', 'triechange', 'triecheckall', 'groupechange', 'remis');
// Actions appelées depuis le site compte / rapports promoteur (sans usa_id).
$tabCompteActions = array(
'chksave',
'triechange',
'triecheckall',
'groupechange',
'remis', // dossard récupéré (compte / gestion V2)
'validequestion', // validation questions adhésion (inc_tableau_mail_questions)
'actif', // oui/non listes rapports custom (+ cadeaux MEC)
);
$blnComptePromoteur = in_array($action, $tabCompteActions, true)
&& $intComCompte > 0
&& empty($_SESSION['usa_id']);
@ -95,6 +103,39 @@ if ($blnComptePromoteur) {
));
exit;
}
} elseif ($action === 'actif') {
// Listes rapports custom : table = men_id encodé — vérifier le droit rapport.
$intMenuRapport = intval(base64_decode(urldecode((string)($_REQUEST['table'] ?? ''))));
if ($intMenuRapport <= 0 || !fxSuperadmReportMenuAllowed($intMenuRapport)) {
echo json_encode(array(
'state' => 'error',
'message' => 'Accès refusé pour cette action.',
'code' => 'forbidden',
));
exit;
}
} elseif ($action === 'validequestion') {
// Page compte mail questions — le promoteur doit avoir un accès événement (legacy ou V2).
$blnOkQuestion = false;
$strEvePromoteur = (string)$db->fxGetVar(
'SELECT com_eve_promoteur FROM inscriptions_comptes WHERE com_id = ' . $intComCompte . ' LIMIT 1'
);
if (trim($strEvePromoteur) !== '') {
$blnOkQuestion = true;
} else {
if (!function_exists('fxEveAccesComHasV2')) {
require_once dirname(__DIR__) . '/php/inc_fx_eve_acces.php';
}
$blnOkQuestion = fxEveAccesComHasV2($intComCompte);
}
if (!$blnOkQuestion) {
echo json_encode(array(
'state' => 'error',
'message' => 'Accès refusé pour cette validation.',
'code' => 'forbidden',
));
exit;
}
} else {
// Prefs rapport : ne jamais laisser le promoteur écrire un autre com_id
$_REQUEST['key'] = $intComCompte;