src/EventListener/ModuleAuthorisationListener.php line 617

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use Symfony\Component\HttpKernel\Event\RequestEvent;
  4. use Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage;
  5. use App\Entity\User;
  6. use App\Enum\RoleEnum;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
  9. use Symfony\Component\Security\Core\Security;
  10. class ModuleAuthorisationListener extends AbstractController
  11. {
  12.     const ROUTES_ACTION=[
  13.         'action_configuration',
  14.         'action_index',
  15.         'action_list',
  16.         'action_new',
  17.         'action_edit',
  18.         'action_delete',
  19.         'action_annuler',
  20.         'update_cell',
  21.         'action_validation',
  22.         'action_kanban',
  23.         'action_kanban_show',
  24.         'actionkanban_list',
  25.         'kanban_edit',
  26.         'SaveAction',
  27.         'actionMother',
  28.         'pdf_modal',
  29.         'action_download_doc',
  30.         'upload_document_action',
  31.         'action_plan_list',
  32.         'actionplan_list',
  33.         'action_plan_new',
  34.         'action_plan_show',
  35.         'action_plan_edit',
  36.         'action_plan_delete',
  37.         'action_plan_planification',
  38.         'action_plan_validation',
  39.         'action_plan_refused',
  40.         'action_plan_annuler',
  41.         'new_pa_external',
  42.         'terminer_planification',
  43.         'dashboard_action',
  44.         'dashboard_action_plan',
  45.         'indicator_new',
  46.         'SaveIndicator',
  47.         'resource_new',
  48.         'SaveResource'
  49.     ];
  50.     const ROUTES_PROCESSUS=[
  51.         'activity_list',
  52.         'activity_new',
  53.         'SaveActivity',
  54.         'activity_show',
  55.         'activity_edit',
  56.         'activity_delete',
  57.         'activities_json',
  58.         'select_activities',
  59.         'dashboard_processus',
  60.         'data_index',
  61.         'data_new',
  62.         'SaveData',
  63.         'data_show',
  64.         'data_edit',
  65.         'data_delete',
  66.         'data_delete_ajax',
  67.         'processus_datas',
  68.         'processus_datas_json',
  69.         'indicator_index',
  70.         'indicator_new',
  71.         'SaveIndicator',
  72.         'indicator_edit',
  73.         'indicator_delete',
  74.         'indicator_delete_ajax',
  75.         'surveillance',
  76.         'surveillanceGlobal',
  77.         'indicator_list',
  78.         'update_indicatorValues',
  79.         'update_selected_options',
  80.         'dashboard_indicators',
  81.         'save_indicator_comment',
  82.         'processus_indicators',
  83.         'processus_indicators_json',
  84.         'processus_index',
  85.         'config_processus',
  86.         'processus_new',
  87.         'processus_show',
  88.         'processus_edit',
  89.         'processus_fiche_edit',
  90.         'processus_delete',
  91.         'dashboard_processus_signle',
  92.         'processus_identity',
  93.         'all_processus',
  94.         'processus_fiche_identite',
  95.         'processus_configuration',
  96.         'processus_synthese',
  97.         'processus_participants',
  98.     ];
  99.     const ROUTES_REUNION = [
  100.         'inner_pageconduite_reunion',
  101.         'inner_pageinner_page_analyse_6m',
  102.         'inner_pageinner_page_analyse_5p',
  103.         'inner_pageinnder_page_new_action',
  104.         'inner_pageinnder_page_edit_action',
  105.         'inner_pageinner_page_action_plan_show',
  106.         'reunion_avis_index',
  107.         'odj_list',
  108.         'reunion_avis_new',
  109.         'reunion_avis_show',
  110.         'reunion_avis_edit',
  111.         'reunion_avis_delete',
  112.         'loadODJ',
  113.         'reunion_configuration',
  114.         'loadPeriodicity',
  115.         'reunion_index',
  116.         'reunion_list',
  117.         'reunion_new',
  118.         'reunion_show',
  119.         'reunion_edit',
  120.         'reunion_delete',
  121.         'updateStatus',
  122.         'reunion_endReunion',
  123.         'save_draft',
  124.         'check_actions',
  125.         'create_empty_subject',
  126.         'save_debut',
  127.         'reunion_pdf',
  128.         'sendMail',
  129.         'reunion_download_pdf',
  130.         'add_date_start',
  131.         'save_reunion_comment',
  132.         'reunion_subjects',
  133.         'saveReunionSubject',
  134.         'deleteReunionSubject',
  135.         'updateReunionSubject',
  136.     ];
  137.     const ROUTES_TIKTOP = [
  138.         'conduire_inspection_entreprise',
  139.         'conduire_inspection_metier',
  140.         'conduire_inspection_entite',
  141.         'decoupage_metier',
  142.         'configurer_questionnaire',
  143.         'add_Quest',
  144.         'duplicate_Quest',
  145.         'edit_Quest',
  146.         'new_questionnaire',
  147.         'list_Question',
  148.         'all_Questionnaire',
  149.         'all_Question',
  150.         'new_question',
  151.         'duplicate_questionnaire',
  152.         'edit_questionnaire',
  153.         'edit_question_questionnaire',
  154.         'delete_question',
  155.         'delete_questionnaire',
  156.         'index_inspection',
  157.         'new_inspection',
  158.         'new_inspection_test',
  159.         'all_Question_Inspection',
  160.         'photo_inspection',
  161.         'edit_question_conduire',
  162.         'all_chapitre_Inspection',
  163.         'inspection_list',
  164.         'analyse_Inspection',
  165.         'save_comment_inspection',
  166.         'inspection_pdf',
  167.         'inspection_download_pdf',
  168.         'upload_pdf_inspection',
  169.         'inspection_delete',
  170.         'inspection_reporting',
  171.         'inspection_resultat_inspection',
  172.         'closeInspection',
  173.         'list_type_intervention',
  174.         'new_type_intervention',
  175.         'edit_type_intervention',
  176.         'delete_type_intervention',
  177.         'location',
  178.         'listEvrpJob',
  179.         'new_mission',
  180.         'edit_mission',
  181.         'delete_mission',
  182.         'missions_list_by_job',
  183.         'listEvrpZone',
  184.         'new_zone',
  185.         'edit_zone',
  186.         'delete_zone',
  187.         'zones_list_by_location'
  188.     ];
  189.     const ROUTES_GED = [
  190.         'document_index',
  191.         'document_new',
  192.         'document_show',
  193.         'document_edit',
  194.         'document_delete',
  195.         'Objectfiles',
  196.         'document_list',
  197.         'folder_index',
  198.         'folder_new',
  199.         'folder_show',
  200.         'folder_edit',
  201.         'show_subfolders',
  202.         'show_directories',
  203.         'create_Folder',
  204.         'update_Folder',
  205.         'folder_delete_js',
  206.         'ged_directory',
  207.         'ged_index',
  208.         'ged_index2',
  209.         'ged_list',
  210.         'ged_listP',
  211.         'ged_new',
  212.         'new_file',
  213.         'save_file',
  214.         'ged_edit',
  215.         'ged_delete',
  216.         'folder_delete',
  217.         'ged_download_file',
  218.         'fileuploadhandler',
  219.         'pdfUploadModal',
  220.         'pdfUpload',
  221.         'loadFiles',
  222.     ];
  223.     const ROUTES_ETSI = [
  224.         'analyse_amelioration',
  225.         'modal_prise_decision',
  226.         'constat_list_amelioration',
  227.         'analyse_Constat_proposition',
  228.         'new_constat_proposition'
  229.     ];
  230.     const ROUTES_DYSFONCTIONNEMENT = [
  231.         'analyse',
  232.         'prise_decision_modal',
  233.         'prise_decision_new',
  234.         'list_pa_preventif',
  235.         'constat_generate_pdf',
  236.         'list_cause_5p',
  237.         'list_cause_6m',
  238.         'modal_cause6m',
  239.         'save_cause6m',
  240.         'delete_cause6m',
  241.         'Constat_list',
  242.         'analyse_Constat_dysfonctionnement',
  243.         'constat_list_accident',
  244.         'constat_list_reclamation',
  245.         'analyse_Constat_reclamation',
  246.         'configurer_terminologie',
  247.         'config_terminologie',
  248.         'add_Term',
  249.         'config_Term_add',
  250.         'update_config_modal',
  251.         'update_config_terminologie',
  252.         'delete_config_terminologie',
  253.         'finRetourExp_modal',
  254.         'save_fin_retour_exp',
  255.         'enregistrer_dysfonctionnement_constat',
  256.         'enregistrer_amelioration_constat',
  257.         'enregistrer_reclamation_constat',
  258.         'enregistrer_accident_constat',
  259.         'new_constat',
  260.         'update_dysfonctionnement_constat',
  261.         'update_constat',
  262.         'reporting_constat',
  263.         'analyse_5p',
  264.         'analyse_6m',
  265.         'generate_constat_pdf',
  266.         'loadConstats',
  267.         'save_cause5p',
  268.         'save_all_causes5p'
  269.         'save_reunion',
  270.     ];
  271.     const ROUTES_CONFORMITY=[
  272.         'conformity_article_index',
  273.         'conformity_article_list_json',
  274.         'conformity_article_new',
  275.         'conformity_article_show',
  276.         'conformity_article_edit',
  277.         'conformity_article_delete',
  278.         'conformity_configuration',
  279.         'loadDomainTableData',
  280.         'handleDomainTable',
  281.         'conformity_index',
  282.         'conformite_reglementaire',
  283.         'conformity_list',
  284.         'conformity_reporting',
  285.         'conformity_index2',
  286.         'conformity_otherText',
  287.         'conformity_evaluer',
  288.         'conformity_modal',
  289.         'conformity_modalP',
  290.         'conformity_new',
  291.         'conformity_show',
  292.         'conformity_edit',
  293.         'conformity_delete',
  294.         'conformity_pour_info',
  295.         'uploadTextFile',
  296.         'draftTexts',
  297.         'updatePeriodicity',
  298.         'new_keyword',
  299.         'save_keyword',
  300.         'keyword_list',
  301.         'keywords_json',
  302.         'keyword_delete',
  303.         'loadKeyWords',
  304.         'conformity_configuration_decoupage',
  305.         'conformity_configuration_terminologie',
  306.         'domain_list_json',
  307.         'save_domain_elements',
  308.         'edit_domain_elements',
  309.         'delete_domain_elements',
  310.         'conformite_Texte',
  311.         'applicable',
  312.         'delete_Texte',
  313.         'conformite_analyse',
  314.         'status_modal',
  315.         'update_status',
  316.         'save_datevigueur',
  317.         'success_modal',
  318.         'location',
  319.         'listEvrpJob',
  320.         'new_mission',
  321.         'edit_mission',
  322.         'delete_mission',
  323.         'missions_list_by_job',
  324.         'listEvrpZone',
  325.         'new_zone',
  326.         'edit_zone',
  327.         'delete_zone',
  328.         'zones_list_by_location'
  329.     ];
  330.     const ROUTES_VGP=[
  331.         'carnet_bord',
  332.         'config_classement',
  333.         'config_classement_list',
  334.         'save_group_element_individuel',
  335.         'group_element_individuel_edit',
  336.         'group_element_individuel_delete',
  337.         'group_element_list',
  338.         'vgp_configuration_decoupage',
  339.         'vgp_pilotage',
  340.         'vgp_surveillance',
  341.         'observation_list',
  342.         'nouvel_element_individuel',
  343.         'new_element_indiv',
  344.         'update_element',
  345.         'update_element_indiv',
  346.         'nouveau_rapport',
  347.         'new_rapport',
  348.         'element_upload_files',
  349.         'load_elements',
  350.         'get_last_ref',
  351.         'vgp_element_files',
  352.         'vgp_reporting',
  353.         'surveillance_verification_periodique',
  354.         'analyse_surveillance_verification',
  355.         'config_verification',
  356.         'list_type_verification',
  357.         'config_save_verification',
  358.         'config_delete_verification',
  359.         'config_check_verification',
  360.         'list_type_verification_elements',
  361.         'config_save_verification_element',
  362.         'config_delete_verification_element',
  363.         'location',
  364.         'listEvrpJob',
  365.         'new_mission',
  366.         'edit_mission',
  367.         'delete_mission',
  368.         'missions_list_by_job',
  369.         'listEvrpZone',
  370.         'new_zone',
  371.         'edit_zone',
  372.         'delete_zone',
  373.         'zones_list_by_location'
  374.     ];
  375.     const ROUTES_BILAN_ENV=[
  376.         'analyseENV',
  377.         'analyseENVData',
  378.         'datatableLocationFilterEnv',
  379.         'configuration_cotation_env',
  380.         'seuil_list_env',
  381.         'reporting_bilan_env',
  382.         'configuration_decoupage_env',
  383.         'frequenceEnv_list',
  384.         'gravitesEnv_list',
  385.         'frequenceEnv_edit',
  386.         'graviteEnv_edit',
  387.         'frequenceEnv_delete',
  388.         'graviteEnv_delete',
  389.         'seuilEnv_edit',
  390.         'MOPEnv_list',
  391.         'MOGEnv_list',
  392.         'MOPEnv_edit',
  393.         'MOGEnv_edit',
  394.         'MOPEnv_delete',
  395.         'MOGEnv_delete',
  396.         'criticiteEnv_new',
  397.         'evalEnv_list',
  398.         'saveEnv_AC',
  399.         'editEnv_condition',
  400.         'condition_getLocation',
  401.         'editEnv_aspect',
  402.         'aspect_delete_Location',
  403.         'condition_delete_Location',
  404.         'edit_criticite_LocationENV',
  405.         'edit_prevention_LocationENV',
  406.         'saveCrticite_LocationENV',
  407.         'lieux_etudierENV',
  408.         'identification_env_lieu',
  409.         'listLifeCycle',
  410.         'new_lifeCycle',
  411.         'edit_lifeCycle',
  412.         'delete_lifeCycle',
  413.         'save_comment_condition_subdomain',
  414.         'condition_subdomain_delete',
  415.         'check_action_condition_subdomain',
  416.         'location',
  417.         'listEvrpJob',
  418.         'new_mission',
  419.         'edit_mission',
  420.         'delete_mission',
  421.         'missions_list_by_job',
  422.         'listEvrpZone',
  423.         'new_zone',
  424.         'edit_zone',
  425.         'delete_zone',
  426.         'zones_list_by_location',
  427.         'impact_list',
  428.         'impact_new',
  429.         'impact_edit',
  430.         'impact_delete'
  431.     ];
  432.     const ROUTES_BILAN_SST=[
  433.         'analyseSST',
  434.         'analyseSSTData',
  435.         'reporting_bilan',
  436.         'frequence_list',
  437.         'gravites_list',
  438.         'frequence_edit',
  439.         'gravite_edit',
  440.         'frequence_delete',
  441.         'gravite_delete',
  442.         'seuil_edit',
  443.         'MOP_list',
  444.         'MOG_list',
  445.         'MOP_edit',
  446.         'MOG_edit',
  447.         'MOP_delete',
  448.         'MOG_delete',
  449.         'criticite_new',
  450.         'identification_sst_metier',
  451.         'identification_sst_lieu',
  452.         'evalJob_list',
  453.         'save_TS',
  454.         'edit_situation',
  455.         'situation_get',
  456.         'task_delete',
  457.         'situation_delete',
  458.         'edit_criticite',
  459.         'edit_prevention',
  460.         'saveCrticite',
  461.         'metier_etudier',
  462.         'evalLocation_list',
  463.         'saveLocation_TS',
  464.         'editLocation_situation',
  465.         'editJob_task',
  466.         'situation_getLocation',
  467.         'task_delete_Location',
  468.         'situation_delete_Location',
  469.         'edit_criticite_Location',
  470.         'edit_prevention_Location',
  471.         'saveCrticite_Location',
  472.         'lieux_etudier',
  473.         'risque_list',
  474.         'risque_new',
  475.         'risque_edit',
  476.         'risque_delete',
  477.         'risque_test',
  478.         'location',
  479.         'listEvrpJob',
  480.         'new_mission',
  481.         'edit_mission',
  482.         'delete_mission',
  483.         'missions_list_by_job',
  484.         'listEvrpZone',
  485.         'new_zone',
  486.         'edit_zone',
  487.         'delete_zone',
  488.         'zones_list_by_location',
  489.         'configuration_decoupage',
  490.         'configuration_cotation',
  491.         'seuil_list',
  492.         'save_comment_situation_risque',
  493.         'situation_risque_delete',
  494.         'check_action'
  495.     ];
  496.     const ROUTES_ERGONOMIE=[
  497.         'reporting_ergonomie',
  498.         'analyse_ergonomie',
  499.         'configuration_decoupage_ergonomie',
  500.         'enregistrer_posture',
  501.         'ergonomie_create',
  502.     ];
  503.     const ROUTES_DEFAULTS=[
  504.         'book_mark_add',
  505.         'book_mark_remove',
  506.         'book_mark_check',
  507.         'SaveComment',
  508.         'home',
  509.         'login',
  510.         'logout',
  511.         'notification',
  512.         'app_forgot_password_request',
  513.         'app_check_email',
  514.         'app_reset_password',
  515.         'get_job'
  516.     ];
  517.     const ROUTES_CONFIGURATION=[
  518.         'company_index',
  519.         'company_edit',
  520.         'app_configuration_notification',
  521.         'app_configuration_notification_list',
  522.         'app_configuration_role',
  523.         'app_configuration_role_list',
  524.         'updateAutorisation',
  525.         'app_configuration_siege_index',
  526.         'app_configuration_siege_new',
  527.         'app_configuration_siege_show',
  528.         'app_configuration_siege_edit',
  529.         'app_configuration_siege_delete',
  530.         'app_configuration_siege_entie',
  531.         'app_configuration_user',
  532.         'app_configuration_user_list',
  533.         'app_configuration_user_modal',
  534.         'app_configuration_user_save',
  535.         'user_list',
  536.         'ceate_user',
  537.         'edit_user',
  538.         'user_delete',
  539.     ];
  540.     const ROUTES_CONFIGURATION_TERMINOLOGIE=[
  541.         'new_domain',
  542.         'save_domain',
  543.         'domain_edit',
  544.         'domain_list',
  545.         'domains_json',
  546.         'domain_delete',
  547.         'sources_json',
  548.         'save_source',
  549.         'source_edit',
  550.         'source_delete',
  551.         'new_sub_domain',
  552.         'edit_sub_domain',
  553.         'save_sub_domain',
  554.         'subdomain_list',
  555.         'subdomains_json',
  556.         'subdomain_delete',
  557.         'loadSubdomains',
  558.         'subjects_json',
  559.         'save_subject',
  560.         'subject_edit',
  561.         'subject_delete',
  562.         'types_json',
  563.         'save_type',
  564.         'type_edit',
  565.         'type_delete',
  566.     ];
  567.     const MODULES =  [
  568.         'Defaults'=> self::ROUTES_DEFAULTS,
  569.         'Configuration_terminologie'=> self::ROUTES_CONFIGURATION_TERMINOLOGIE,
  570.         'Action'=> self::ROUTES_ACTION,
  571.         'Processus'=> self::ROUTES_PROCESSUS,
  572.         'Réunion'=> self::ROUTES_REUNION,
  573.         'Archi\'docs'=> self::ROUTES_GED,
  574.         'Conformité'=> self::ROUTES_CONFORMITY,
  575.         'Bilan SST'=> self::ROUTES_BILAN_SST,
  576.         'Bilan ENV'=> self::ROUTES_BILAN_ENV,
  577.         'Ergonomie'=> self::ROUTES_ERGONOMIE,
  578.         'V.G.P'=> self::ROUTES_VGP,
  579.         'TikTop - Vérification'=> self::ROUTES_TIKTOP,
  580.         'Dysfonctionnement'=> self::ROUTES_DYSFONCTIONNEMENT,
  581.         'Et Si ? - Proposition'=> self::ROUTES_ETSI,
  582.     ];
  583.     private $token;
  584.     private const DEFAULT_MODULES = [
  585.         "Action",
  586.         "Processus",
  587.         "Réunion",
  588.         "Archi'docs",
  589.         "Conformité",
  590.         "Bilan SST",
  591.         "Bilan ENV",
  592.         "Ergonomie",
  593.         "V.G.P",
  594.         "TikTop - Vérification",
  595.         "Dysfonctionnement",
  596.         "Et Si ? - Proposition"
  597.     ];
  598.     private const REQUIRED_MODULES = [
  599.         "Defaults",
  600.         "Configuration_terminologie"
  601.     ];
  602.     public function __construct(UsageTrackingTokenStorage $token,Security $security ) {
  603.         $this->token $token;
  604.         $this->security $security;
  605.     }
  606.     public function onKernelRequest(RequestEvent $event): void
  607.     {
  608.         if($this->token->getToken() === null) {
  609.             return;
  610.         }
  611.         
  612.         /** @var User $user */
  613.         $user $this->token->getToken()->getUser();
  614.         $currentRoute $event->getRequest()->attributes->get('_route');
  615.         $userModules $user->getModules();
  616.         $userModules[] = 'Defaults';
  617.         $userModules[] = 'Configuration_terminologie';
  618.         // if(in_array($currentRoute, self::ROUTES_CONFIGURATION)) {
  619.         //     $this->denyAccessUnlessGranted(RoleEnum::ROLE_ADMIN, null,'Accès refusé.');
  620.         // }
  621.         $accessPaths = [];
  622.         
  623.         // Récupérer les modules de l'utilisateur ou les modules par défaut
  624.         $userModules $user->getModules() ?? self::DEFAULT_MODULES;
  625.         
  626.         // Ajouter les modules requis
  627.         $userModules array_merge($userModulesself::REQUIRED_MODULES);
  628.         
  629.         // Supprimer les doublons potentiels
  630.         $userModules array_unique($userModules);
  631.         
  632.         foreach($userModules as $userModule) {
  633.             if (isset(self::MODULES[$userModule])) {
  634.                 foreach(self::MODULES[$userModule] as $module) {
  635.                     $accessPaths[] = $module;
  636.                 }
  637.             }
  638.         }
  639.         
  640.         return;
  641.     }
  642.     
  643. }