Aller au contenu principal

Expériences collaborateur, manager et administrateur — guide technique

Pour tracer la sélection de rôle, le rendu d'accueil et la navigation hybride. Les constats sont Vérifiés dans le code sauf mention contraire ; la révision déployée n'est pas établie. Captures dans Fonctionnel, responsabilités dans Configuration. Aucune capture applicative dans cette page.

Architecture et concepts d'accès​

User legacy authentifié + rôles existants
→ validation du rôle demandé à la racine
→ persistance de l'ordre des rôles
→ /plateforme/ | /company/ | /admin/

Shell manager + contrôles d'activation/permissions
→ module nextgen intégré
→ initialisation de session et droits effectifs
→ garde d'espace personnel/admin + autorisation du module/des données

L'administrateur plateforme legacy (ROLE_ADMIN), les droits d'administration client et allow-admin-space nextgen sont trois mécanismes distincts. « Admin » ou un suffixe de chemin ne suffit pas : identifiez le chemin de base, le shell et le propriétaire de route.

Dépôt / sourceResponsabilité
Legacy src/Main/HomeBundle/Controller/DefaultController.php::indexActionValidation du choix, ordre persistant et redirection.
Legacy config/packages/security.yamlAccès par rôle aux familles de routes.
Legacy app/Resources/views/top_layout_core_company_v3.html.twigMenu Espaces à partir des rôles existants, lexique/traduction et coche active.
Legacy src/Customer/HomeBundle/Controller/DefaultController.php et Resources/views/Default/index.html.twigContexte collaborateur et sélection ancien/V2.
Legacy app/Resources/views/homePage/Modèles V2/thème et partiels de cartes/actualités.
Legacy src/Company/HomeBundle/Controller/DefaultController.phpContexte entreprise, variantes, activité, graphiques et actions de campagnes.
Legacy src/Admin/HomeBundle/Controller/DefaultController.php::indexActionConsole plateforme et liste autorisée.
Frontend src/modules/NavigationModule/components/NavigationHeader.vueMenu profil nextgen, espaces et retour legacy.
Frontend src/router/{index,private-routes,guards}.tsRoutage, session, espaces et permissions de routes.
Backend src/Infrastructure/Migrations/Version20260512085559.phpEnregistrement des deux permissions d'espace.

Legacy, Frontend et Backend désignent respectivement smartmobility-legacy, smartmobility-nextgen-front et smartmobility-nextgen-back. Les quatre dépôts, dont aihub, étaient disponibles. Aucune dépendance AIHub n'a été tracée dans ces contrôleurs d'accueil/navigation ; le mot suggestion ne prouve pas un appel IA.

Sélection legacy et persistance​

Le dispatcher racine exige l'authentification complète. Un paramètre role non vide n'est accepté que s'il appartient déjà à User::getRoles(). Sinon, retour à la racine. En cas de choix valide, il place le rôle en tête, conserve les autres, persiste et flush le User, puis redirige selon le premier rôle : collaborateur, entreprise, recruteur ou admin/super-admin. Sans authentification : page de connexion.

Il s'agit d'une préférence persistée parmi les droits existants, pas d'une attribution et pas seulement d'un état local/session. Ne présentez pas la bascule comme incapable d'écrire un état de compte. Plusieurs onglets partagent l'ordre enregistré tout en affichant des pages différentes ; gestion de concurrence non établie.

security.yaml exige ROLE_COMPANY pour /company, ROLE_CUSTOMER pour /plateforme, ROLE_ADMIN pour /admin. Les contrôles d'action/module s'ajoutent. Le menu V3 énumère les rôles existants et marque l'entreprise active. Sa condition extérieure exige normalement plusieurs rôles non génériques, avec une exception codée ; le switch n'est pas garanti pour tous.

Contrats internes de navigation​

Requête / routeContrat et effet
Racine /Redirection authentifiée selon l'ordre des rôles, sans attribution.
Racine avec un rôle déjà détenuValide, persiste l'ordre et redirige ; ce n'est pas une API en lecture seule.
/plateforme/Accueil collaborateur, métadonnée home_access et conditions du contrôleur/modèle.
/company/Accueil manager, validation User/School et chargements associés.
/admin/Console privilégiée legacy, distincte de l'admin nextgen autonome.
/company/{baseAlias}/{feature}Wrapper hybride, alias app/space et feature validée via AdminFeaturesEnum, ou not-found.

Montage dans config/routes.yaml et les fichiers routing des HomeBundle. Contrats navigateur internes, pas API publique. GET /company/ illustre une navigation pour une session déjà autorisée ; les liens de sélection de rôle ne conviennent pas à un contrôle de disponibilité puisqu'ils persistent un état.

Composition des accueils​

Collaborateur​

Customer\HomeBundle\Controller\DefaultController::indexAction résout le dossier Customer courant. Les utilisateurs non permanents sont redirigés vers les offres ; un Customer absent produit une branche d'accueil vide. Le modèle Resources/views/Default/index.html.twig choisit l'ancien contenu ou le fragment homePageV2 via display_old_version_homepage_fo.

homePageV2() assemble complétion, compétences, contacts, campagnes, actualités et widgets. theme_v2-homepage choisit home_page-v2_themev2.html.twig plutôt que l'autre disposition. Le modèle thémé inclut profil et découverte de métiers ; cette dernière utilise true or ...metiers, donc n'est pas fiablement masquée par metiers. Les offres exigent offres et un indicateur interne/externe ; le partiel choisit index/tableau selon job_offer_theme_v2.

Les options de masquage profil/compétences et rendez-vous doivent être interprétées dans leur branche réelle, sans modèle universel de widgets supposé.

Entreprise / manager​

Company\HomeBundle\Controller\DefaultController::indexAction valide User et School, peut assurer l'existence d'un enregistrement Employment, résout les School du manager, génère éventuellement le fil via notification_dashboard, charge graphiques et actualités, puis choisit renderAcceuilBo() avec module_acceuil_bo, sinon renderDefaultIndex().

Le rendu récent vérifie theme_v3-bo. Seule la combinaison V3 et enable_new_neobrain_hybrid_platform appelle TodoCampaignsProvider::build(). Celui-ci contrôle smr_campaigns_access / smr_people_review_access, charge les sources via src/Service/V2/CampaignService.php et fusionne les éléments triés par timestamp puis titre. Les requêtes utilisent actions_todo[equal]=1, un tri de dates et une page de 100 éléments maximum par source ; aucune pagination exhaustive au-delà n'a été établie.

L'entretien utilise end_date ; People Review utilise la fin de phase 1 ou la réunion de phase 2 selon statut. Une date absente/invalide garde timestamp zéro : le tri « prochaine échéance » doit être nuancé pour ces éléments.

Une source en échec est omise. Deux sources nulles, en échec et/ou non autorisées, masquent la carte. Au moins une source réussie mais vide permet l'état vide. Carte vide, masquée et inventaire complet des campagnes sont donc différents. Le succès réel des appels n'a pas été indépendamment tracé depuis le zéro observé.

Administration plateforme​

Admin\HomeBundle\Controller\DefaultController::indexAction charge ou crée l'Admin du compte, collecte ses Setting affectés et cherche les School racines correspondantes, triées par fullname. ROLE_ADMIN seul ne prouve pas un catalogue illimité.

Resources/views/Default/index.html.twig rend une KTDatatable locale : nom, type et liens d'action. Dix lignes initiales, état en web storage, filtrage/pagination serveur désactivés. La saisie cherche Name ; le type cherche Type avec All vide et DEMO/LIVE/TEST/INACTIVE. Filtrer réduit une liste déjà chargée sans élargir les droits. La combinaison exacte dans la bibliothèque n'a pas été tracée.

Les cartes propres salarié/manager utilisent les liens de rôle existant à la racine. Les liens d'entrée de plateforme changent l'identité/contexte et ne sont pas une simple bascule de rôle. Aucun contexte client n'a été ouvert pendant l'inspection. Le tiroir de recherche utilisateur reste distinct du champ de recherche de plateformes.

Nextgen : session, espaces et intégration​

NavigationHeader.vue affiche les destinations selon allow-personal-space / allow-admin-space. switchSpace() ferme le menu, écrit adminModeEnabled et navigue vers AppRoute.ADMIN/PERSONAL. goToLegacy() va à /company. Le store initialise/persiste le mode en localStorage : préférence, pas permission serveur.

router/guards.ts initialise la session via /api/secure/check-session, vérifie sa structure, charge profil, langue entreprise, permissions, traductions et navigation. Ne journalisez ni n'affichez les tokens. En intégration, l'échec d'authentification transmet un message auth-required au parent plutôt que d'imposer une navigation de déconnexion à l'iframe.

Le garde d'espace renvoie vers l'autre espace autorisé, ou not-found si aucun ne l'est. Les permissions de route restent contrôlées séparément ; un tableau de permissions utilise une logique any-of. Autorisation backend et visibilité des dossiers restent à vérifier par module.

Backend src/Http/Api/Routing/V2/user.yaml déclare GET /user/self/permission, avec getCurrentUser et findRightsByUser pour les droits effectifs du compte authentifié. La migration de permissions cible les presets collaborateur/manager pour personnel et RH/admin pour administration ; elle ne décrit pas les affectations actuelles.

La racine frontend redirige vers PERSONAL. Les routes privées /admin et /personal rendent src/modules/Home/Home.vue, dont le template inspecté est un div vide. Ne déduisez pas un tableau de bord autonome alimenté de ces routes. Résolvez les URL relativement à APP_BASE_PATH ; le /admin/ legacy brut a un autre propriétaire.

Le contrôleur hybride legacy valide les features et rend frame.html.twig avec embedded=1&rewritePath=company. Les features nues admin/personal redirigent vers l'accueil entreprise. CompanyNavigationExtension combine activations, profils et scopes SMR ; SmrDisplayService vérifie l'accès nextgen via SmrVoter. Le voter refuse en cas d'exception de récupération des droits et journalise l'échec. Thème/hybride et résolution effective de session/scopes sont distincts.

Pannes, confidentialité et extensions​

SymptômeInspection
Mauvais espace initialOrdre legacy persisté versus redirection racine nextgen et préférence locale.
Menu absent / module interditAffichage du shell, garde d'espace, route, action backend et population séparément.
Carte campagne masquée/videV3/hybride, accès sources et résultat null/tableau vide du fournisseur.
Accueil autonome videComposant Home et route de module réellement attendue.
Boucle de connexion / iframe bloquéeSession, message parent auth-required, chemin de base et contexte intégré.
Liste admin restreinteRelation Admin.settings, requête School et filtres/page restaurés.

Aucun tableau de supervision, calendrier de reprise, parcours mobile complet ou politique de conservation des logs vérifié. Journalisez des informations de route/source sans tokens, profils, actualités privées ni réponses. Les captures fonctionnelles excluent identité et données inter-clients.

Pour une extension, séparez appartenance aux rôles legacy, permissions d'espace nextgen et autorisation des dossiers. Ajoutez route et conditions de menu ensemble, respectez le contexte intégré, langue/lexique et états vides/échec. Une carte ou entrée de menu ne prouve pas l'autorisation de destination.

Preuves documentaires et limites​

Documenté dans Confluence : playbook SMR, v3, 24 septembre 2026, navigation unifiée et permissions séparées ; notes de travail, v22, 8 juin 2026, configuration hybride historique et retour ; modèles SMR, v1, 13 mars 2026, coexistence progressive. Ce contexte ne prouve pas les contrats des endpoints. Les références FAQ/méthodologie/onboarding fournies avaient été résolues dans cette conversation, sans contrat d'accueil supplémentaire.

Observé dans l'application : voir Fonctionnel, 23 octobre 2026. Non vérifié : commit de production, audit complet de sécurité, déploiement des accueils nextgen autonomes, toutes les branches tenant/thème, pagination au-delà de la page demandée et toutes les dépendances d'exploitation. Aucun dépôt applicatif modifié ni permission de production changée.

Sources du guide fonctionnel​

Ces références d’implémentation et de produit étayent le guide fonctionnel. Le code local n’établit pas la révision ou les options déployées. Les observations dans l’application restent distinctes du code et des sources documentaires.

Vérifié dans le code : dispatcher Main/HomeBundle, contrôleurs et vues HomeBundle collaborateur/entreprise/admin, top_layout_core_company_v3.html.twig, frontend NavigationHeader.vue, guards et Home. Chemins précis dans Technique.

Documenté dans Confluence : playbook SMR, v3, 24 septembre 2026, navigation hybride et droits distincts ; notes SM redesign, v22, 8 juin 2026, navigation historique de configuration et retour legacy. Le dossier FAQ et les pages PS méthodologie/onboarding fournis avaient été consultés dans ce travail documentaire, sans établir de contrat d'accueil.

Dernière mise à jour : 3 novembre 2026