<?php
namespace App\EventListener;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage;
use App\Entity\User;
use App\Enum\RoleEnum;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
use Symfony\Component\Security\Core\Security;
class ModuleAuthorisationListener extends AbstractController
{
const ROUTES_ACTION=[
'action_configuration',
'action_index',
'action_list',
'action_new',
'action_edit',
'action_delete',
'action_annuler',
'update_cell',
'action_validation',
'action_kanban',
'action_kanban_show',
'actionkanban_list',
'kanban_edit',
'SaveAction',
'actionMother',
'pdf_modal',
'action_download_doc',
'upload_document_action',
'action_plan_list',
'actionplan_list',
'action_plan_new',
'action_plan_show',
'action_plan_edit',
'action_plan_delete',
'action_plan_planification',
'action_plan_validation',
'action_plan_refused',
'action_plan_annuler',
'new_pa_external',
'terminer_planification',
'dashboard_action',
'dashboard_action_plan',
'indicator_new',
'SaveIndicator',
'resource_new',
'SaveResource'
];
const ROUTES_PROCESSUS=[
'activity_list',
'activity_new',
'SaveActivity',
'activity_show',
'activity_edit',
'activity_delete',
'activities_json',
'select_activities',
'dashboard_processus',
'data_index',
'data_new',
'SaveData',
'data_show',
'data_edit',
'data_delete',
'data_delete_ajax',
'processus_datas',
'processus_datas_json',
'indicator_index',
'indicator_new',
'SaveIndicator',
'indicator_edit',
'indicator_delete',
'indicator_delete_ajax',
'surveillance',
'surveillanceGlobal',
'indicator_list',
'update_indicatorValues',
'update_selected_options',
'dashboard_indicators',
'save_indicator_comment',
'processus_indicators',
'processus_indicators_json',
'processus_index',
'config_processus',
'processus_new',
'processus_show',
'processus_edit',
'processus_fiche_edit',
'processus_delete',
'dashboard_processus_signle',
'processus_identity',
'all_processus',
'processus_fiche_identite',
'processus_configuration',
'processus_synthese',
'processus_participants',
];
const ROUTES_REUNION = [
'inner_pageconduite_reunion',
'inner_pageinner_page_analyse_6m',
'inner_pageinner_page_analyse_5p',
'inner_pageinnder_page_new_action',
'inner_pageinnder_page_edit_action',
'inner_pageinner_page_action_plan_show',
'reunion_avis_index',
'odj_list',
'reunion_avis_new',
'reunion_avis_show',
'reunion_avis_edit',
'reunion_avis_delete',
'loadODJ',
'reunion_configuration',
'loadPeriodicity',
'reunion_index',
'reunion_list',
'reunion_new',
'reunion_show',
'reunion_edit',
'reunion_delete',
'updateStatus',
'reunion_endReunion',
'save_draft',
'check_actions',
'create_empty_subject',
'save_debut',
'reunion_pdf',
'sendMail',
'reunion_download_pdf',
'add_date_start',
'save_reunion_comment',
'reunion_subjects',
'saveReunionSubject',
'deleteReunionSubject',
'updateReunionSubject',
];
const ROUTES_TIKTOP = [
'conduire_inspection_entreprise',
'conduire_inspection_metier',
'conduire_inspection_entite',
'decoupage_metier',
'configurer_questionnaire',
'add_Quest',
'duplicate_Quest',
'edit_Quest',
'new_questionnaire',
'list_Question',
'all_Questionnaire',
'all_Question',
'new_question',
'duplicate_questionnaire',
'edit_questionnaire',
'edit_question_questionnaire',
'delete_question',
'delete_questionnaire',
'index_inspection',
'new_inspection',
'new_inspection_test',
'all_Question_Inspection',
'photo_inspection',
'edit_question_conduire',
'all_chapitre_Inspection',
'inspection_list',
'analyse_Inspection',
'save_comment_inspection',
'inspection_pdf',
'inspection_download_pdf',
'upload_pdf_inspection',
'inspection_delete',
'inspection_reporting',
'inspection_resultat_inspection',
'closeInspection',
'list_type_intervention',
'new_type_intervention',
'edit_type_intervention',
'delete_type_intervention',
'location',
'listEvrpJob',
'new_mission',
'edit_mission',
'delete_mission',
'missions_list_by_job',
'listEvrpZone',
'new_zone',
'edit_zone',
'delete_zone',
'zones_list_by_location'
];
const ROUTES_GED = [
'document_index',
'document_new',
'document_show',
'document_edit',
'document_delete',
'Objectfiles',
'document_list',
'folder_index',
'folder_new',
'folder_show',
'folder_edit',
'show_subfolders',
'show_directories',
'create_Folder',
'update_Folder',
'folder_delete_js',
'ged_directory',
'ged_index',
'ged_index2',
'ged_list',
'ged_listP',
'ged_new',
'new_file',
'save_file',
'ged_edit',
'ged_delete',
'folder_delete',
'ged_download_file',
'fileuploadhandler',
'pdfUploadModal',
'pdfUpload',
'loadFiles',
];
const ROUTES_ETSI = [
'analyse_amelioration',
'modal_prise_decision',
'constat_list_amelioration',
'analyse_Constat_proposition',
'new_constat_proposition'
];
const ROUTES_DYSFONCTIONNEMENT = [
'analyse',
'prise_decision_modal',
'prise_decision_new',
'list_pa_preventif',
'constat_generate_pdf',
'list_cause_5p',
'list_cause_6m',
'modal_cause6m',
'save_cause6m',
'delete_cause6m',
'Constat_list',
'analyse_Constat_dysfonctionnement',
'constat_list_accident',
'constat_list_reclamation',
'analyse_Constat_reclamation',
'configurer_terminologie',
'config_terminologie',
'add_Term',
'config_Term_add',
'update_config_modal',
'update_config_terminologie',
'delete_config_terminologie',
'finRetourExp_modal',
'save_fin_retour_exp',
'enregistrer_dysfonctionnement_constat',
'enregistrer_amelioration_constat',
'enregistrer_reclamation_constat',
'enregistrer_accident_constat',
'new_constat',
'update_dysfonctionnement_constat',
'update_constat',
'reporting_constat',
'analyse_5p',
'analyse_6m',
'generate_constat_pdf',
'loadConstats',
'save_cause5p',
'save_all_causes5p',
'save_reunion',
];
const ROUTES_CONFORMITY=[
'conformity_article_index',
'conformity_article_list_json',
'conformity_article_new',
'conformity_article_show',
'conformity_article_edit',
'conformity_article_delete',
'conformity_configuration',
'loadDomainTableData',
'handleDomainTable',
'conformity_index',
'conformite_reglementaire',
'conformity_list',
'conformity_reporting',
'conformity_index2',
'conformity_otherText',
'conformity_evaluer',
'conformity_modal',
'conformity_modalP',
'conformity_new',
'conformity_show',
'conformity_edit',
'conformity_delete',
'conformity_pour_info',
'uploadTextFile',
'draftTexts',
'updatePeriodicity',
'new_keyword',
'save_keyword',
'keyword_list',
'keywords_json',
'keyword_delete',
'loadKeyWords',
'conformity_configuration_decoupage',
'conformity_configuration_terminologie',
'domain_list_json',
'save_domain_elements',
'edit_domain_elements',
'delete_domain_elements',
'conformite_Texte',
'applicable',
'delete_Texte',
'conformite_analyse',
'status_modal',
'update_status',
'save_datevigueur',
'success_modal',
'location',
'listEvrpJob',
'new_mission',
'edit_mission',
'delete_mission',
'missions_list_by_job',
'listEvrpZone',
'new_zone',
'edit_zone',
'delete_zone',
'zones_list_by_location'
];
const ROUTES_VGP=[
'carnet_bord',
'config_classement',
'config_classement_list',
'save_group_element_individuel',
'group_element_individuel_edit',
'group_element_individuel_delete',
'group_element_list',
'vgp_configuration_decoupage',
'vgp_pilotage',
'vgp_surveillance',
'observation_list',
'nouvel_element_individuel',
'new_element_indiv',
'update_element',
'update_element_indiv',
'nouveau_rapport',
'new_rapport',
'element_upload_files',
'load_elements',
'get_last_ref',
'vgp_element_files',
'vgp_reporting',
'surveillance_verification_periodique',
'analyse_surveillance_verification',
'config_verification',
'list_type_verification',
'config_save_verification',
'config_delete_verification',
'config_check_verification',
'list_type_verification_elements',
'config_save_verification_element',
'config_delete_verification_element',
'location',
'listEvrpJob',
'new_mission',
'edit_mission',
'delete_mission',
'missions_list_by_job',
'listEvrpZone',
'new_zone',
'edit_zone',
'delete_zone',
'zones_list_by_location'
];
const ROUTES_BILAN_ENV=[
'analyseENV',
'analyseENVData',
'datatableLocationFilterEnv',
'configuration_cotation_env',
'seuil_list_env',
'reporting_bilan_env',
'configuration_decoupage_env',
'frequenceEnv_list',
'gravitesEnv_list',
'frequenceEnv_edit',
'graviteEnv_edit',
'frequenceEnv_delete',
'graviteEnv_delete',
'seuilEnv_edit',
'MOPEnv_list',
'MOGEnv_list',
'MOPEnv_edit',
'MOGEnv_edit',
'MOPEnv_delete',
'MOGEnv_delete',
'criticiteEnv_new',
'evalEnv_list',
'saveEnv_AC',
'editEnv_condition',
'condition_getLocation',
'editEnv_aspect',
'aspect_delete_Location',
'condition_delete_Location',
'edit_criticite_LocationENV',
'edit_prevention_LocationENV',
'saveCrticite_LocationENV',
'lieux_etudierENV',
'identification_env_lieu',
'listLifeCycle',
'new_lifeCycle',
'edit_lifeCycle',
'delete_lifeCycle',
'save_comment_condition_subdomain',
'condition_subdomain_delete',
'check_action_condition_subdomain',
'location',
'listEvrpJob',
'new_mission',
'edit_mission',
'delete_mission',
'missions_list_by_job',
'listEvrpZone',
'new_zone',
'edit_zone',
'delete_zone',
'zones_list_by_location',
'impact_list',
'impact_new',
'impact_edit',
'impact_delete'
];
const ROUTES_BILAN_SST=[
'analyseSST',
'analyseSSTData',
'reporting_bilan',
'frequence_list',
'gravites_list',
'frequence_edit',
'gravite_edit',
'frequence_delete',
'gravite_delete',
'seuil_edit',
'MOP_list',
'MOG_list',
'MOP_edit',
'MOG_edit',
'MOP_delete',
'MOG_delete',
'criticite_new',
'identification_sst_metier',
'identification_sst_lieu',
'evalJob_list',
'save_TS',
'edit_situation',
'situation_get',
'task_delete',
'situation_delete',
'edit_criticite',
'edit_prevention',
'saveCrticite',
'metier_etudier',
'evalLocation_list',
'saveLocation_TS',
'editLocation_situation',
'editJob_task',
'situation_getLocation',
'task_delete_Location',
'situation_delete_Location',
'edit_criticite_Location',
'edit_prevention_Location',
'saveCrticite_Location',
'lieux_etudier',
'risque_list',
'risque_new',
'risque_edit',
'risque_delete',
'risque_test',
'location',
'listEvrpJob',
'new_mission',
'edit_mission',
'delete_mission',
'missions_list_by_job',
'listEvrpZone',
'new_zone',
'edit_zone',
'delete_zone',
'zones_list_by_location',
'configuration_decoupage',
'configuration_cotation',
'seuil_list',
'save_comment_situation_risque',
'situation_risque_delete',
'check_action'
];
const ROUTES_ERGONOMIE=[
'reporting_ergonomie',
'analyse_ergonomie',
'configuration_decoupage_ergonomie',
'enregistrer_posture',
'ergonomie_create',
];
const ROUTES_DEFAULTS=[
'book_mark_add',
'book_mark_remove',
'book_mark_check',
'SaveComment',
'home',
'login',
'logout',
'notification',
'app_forgot_password_request',
'app_check_email',
'app_reset_password',
'get_job'
];
const ROUTES_CONFIGURATION=[
'company_index',
'company_edit',
'app_configuration_notification',
'app_configuration_notification_list',
'app_configuration_role',
'app_configuration_role_list',
'updateAutorisation',
'app_configuration_siege_index',
'app_configuration_siege_new',
'app_configuration_siege_show',
'app_configuration_siege_edit',
'app_configuration_siege_delete',
'app_configuration_siege_entie',
'app_configuration_user',
'app_configuration_user_list',
'app_configuration_user_modal',
'app_configuration_user_save',
'user_list',
'ceate_user',
'edit_user',
'user_delete',
];
const ROUTES_CONFIGURATION_TERMINOLOGIE=[
'new_domain',
'save_domain',
'domain_edit',
'domain_list',
'domains_json',
'domain_delete',
'sources_json',
'save_source',
'source_edit',
'source_delete',
'new_sub_domain',
'edit_sub_domain',
'save_sub_domain',
'subdomain_list',
'subdomains_json',
'subdomain_delete',
'loadSubdomains',
'subjects_json',
'save_subject',
'subject_edit',
'subject_delete',
'types_json',
'save_type',
'type_edit',
'type_delete',
];
const MODULES = [
'Defaults'=> self::ROUTES_DEFAULTS,
'Configuration_terminologie'=> self::ROUTES_CONFIGURATION_TERMINOLOGIE,
'Action'=> self::ROUTES_ACTION,
'Processus'=> self::ROUTES_PROCESSUS,
'Réunion'=> self::ROUTES_REUNION,
'Archi\'docs'=> self::ROUTES_GED,
'Conformité'=> self::ROUTES_CONFORMITY,
'Bilan SST'=> self::ROUTES_BILAN_SST,
'Bilan ENV'=> self::ROUTES_BILAN_ENV,
'Ergonomie'=> self::ROUTES_ERGONOMIE,
'V.G.P'=> self::ROUTES_VGP,
'TikTop - Vérification'=> self::ROUTES_TIKTOP,
'Dysfonctionnement'=> self::ROUTES_DYSFONCTIONNEMENT,
'Et Si ? - Proposition'=> self::ROUTES_ETSI,
];
private $token;
private const DEFAULT_MODULES = [
"Action",
"Processus",
"Réunion",
"Archi'docs",
"Conformité",
"Bilan SST",
"Bilan ENV",
"Ergonomie",
"V.G.P",
"TikTop - Vérification",
"Dysfonctionnement",
"Et Si ? - Proposition"
];
private const REQUIRED_MODULES = [
"Defaults",
"Configuration_terminologie"
];
public function __construct(UsageTrackingTokenStorage $token,Security $security ) {
$this->token = $token;
$this->security = $security;
}
public function onKernelRequest(RequestEvent $event): void
{
if($this->token->getToken() === null) {
return;
}
/** @var User $user */
$user = $this->token->getToken()->getUser();
$currentRoute = $event->getRequest()->attributes->get('_route');
$userModules = $user->getModules();
$userModules[] = 'Defaults';
$userModules[] = 'Configuration_terminologie';
// if(in_array($currentRoute, self::ROUTES_CONFIGURATION)) {
// $this->denyAccessUnlessGranted(RoleEnum::ROLE_ADMIN, null,'Accès refusé.');
// }
$accessPaths = [];
// Récupérer les modules de l'utilisateur ou les modules par défaut
$userModules = $user->getModules() ?? self::DEFAULT_MODULES;
// Ajouter les modules requis
$userModules = array_merge($userModules, self::REQUIRED_MODULES);
// Supprimer les doublons potentiels
$userModules = array_unique($userModules);
foreach($userModules as $userModule) {
if (isset(self::MODULES[$userModule])) {
foreach(self::MODULES[$userModule] as $module) {
$accessPaths[] = $module;
}
}
}
return;
}
}