Architecture Système & Plateforme RH
Plateforme web de recrutement spécialisée dans le secteur de l'hôtellerie et de la restauration (CHR), développée sous Symfony. Elle associe un modèle de sécurité RBAC à double validation par consultants, un moteur de recherche AJAX asynchrone avec KnpPaginator, et des endpoints d'API REST documentés.
┌─────────────────────────────────────────────────────────────────────────────┐
│ TRT Conseil — Architecture RH & Recrutement │
└──────────────────────────────────────┬──────────────────────────────────────┘
│
┌───────────────────────────┼───────────────────────────┐
▼ ▼ ▼
🛡️ Sécurité & Modération RBAC 🔍 Moteur de Recherche AJAX 📡 API REST Headless
• Double validation (TOVALID)• Filter.js sans rechargement• JMS Serializer Groups
• 4 Rôles isolés (Admin/RH) • KnpPaginator (6/page) • Endpoints paginés (/api)
• Upload sécurisé de CV PDF • Synchronisation URL HTML5 • Support mobile & tiers
• Envoi CV par Symfony Mailer• Requête optimisée Doctrine • Documentation JSON
Recrutement CHR à Valeur Humaine
Chaque compte, offre d'emploi et candidature est audité et validé par un consultant RH expert avant toute mise en relation.
Sécurité & Hiérarchie des Rôles
Système de permissions strict à 4 rôles isolés avec statut transitoire TOVALID empêchant les publications non autorisées.
Transmission Automatisée des CVs
Génération et envoi par Symfony Mailer du dossier de candidature avec CV PDF en pièce jointe lors de la validation.
1. Modèle de Sécurité & Gestion des Rôles (RBAC)
Hiérarchie des accès gérée par le composant Security de Symfony avec validation humaine préalable :
| Rôle Système |
Statut |
Capacités & Permissions |
ROLE_ADMIN |
Superviseur |
Création, modification, blocage et suppression des comptes administrateurs et consultants. |
ROLE_CONSULTANT |
Modérateur RH |
Validation des candidats et recruteurs, publication des annonces et transmission des CVs aux employeurs. |
ROLE_RECRUTEUR |
Employeur |
Fiche établissement, dépôt d'offres (CDI, CDD, extras) et réception des candidatures pré-qualifiées. |
ROLE_CANDIDAT |
Candidat |
Dépôt sécurisé de CV PDF, recherche avancée et postulation aux offres d'emploi validées. |
2. Workflows Opérationnels & Traitement des Dossiers
Parcours utilisateurs structurés garantissant la vérification de chaque étape de recrutement :
Workflow Candidat & Gestion du CV PDF
Téléversement sécurisé de CV PDF nettoyé via transliterator_transliterate() et suivi en direct de l'état de validation.
PDF Uploadtransliteratortovalid
Workflow Consultant & Envoi Automatisé
Revue des candidatures en attente et envoi automatique du courriel avec CV en pièce jointe au recruteur lors de la validation.
Symfony MailerDataPartPièce jointe CV
3. Moteur de Recherche Asynchrone (AJAX)
Module JavaScript Filter.js couplé à KnpPaginator et Doctrine QueryBuilder pour une recherche sans rechargement :
// Requête QueryBuilder optimisée dans AnnonceRepository.php
private function getSearchQuery(SearchData $search): QueryBuilder
{
$query = $this->createQueryBuilder('p')
->select('c', 'p')
->join('p.poste', 'c')
->orderBy('p.id', 'DESC');
if (!empty($search->q)) {
$query->andWhere('p.titre LIKE :q')
->setParameter('q', "%{$search->q}%");
}
if (!empty($search->poste)) {
$query->andWhere('c.id IN (:poste)')
->setParameter('poste', $search->poste);
}
return $query;
}
- Écouteurs d'Événements en Temps Réel: Détection des saisies clavier et des filtres de postes avec injection partielle du DOM.
- Pagination KnpPaginator Optimisée: Limitation des jeux de données à 6 éléments par page pour alléger la consommation mémoire.
- Historique HTML5 (replaceState): Mise à jour dynamique de l'URL du navigateur pour permettre le partage direct des liens filtrés.
4. Spécifications de l'API REST Headless
Points de terminaison JSON documentés sérialisés avec JMS Serializer :
| Method |
Endpoint URL |
Groupe JMS |
Description de l'Endpoint |
| GET |
/api/annonces |
getAnnonces |
Liste complète des offres d'emploi validées au format JSON |
| GET |
/api/annoncesby?page={n} |
getAnnonces |
Collection paginée d'annonces avec métadonnées de pagination |
| GET |
/api/annonce/{id} |
getAnnonces |
Détail complet d'une offre d'emploi par son identifiant |
| GET |
/api/annoncesby/{poste} |
getAnnonces |
Filtrage et pagination des annonces selon le libellé du poste |
5. Modèle de Données & Relations ORM
Schéma relationnel normalisé sous MySQL avec intégrité référentielle Doctrine :
Entités Utilisateurs & Profils
User avec email unique, Candidat avec document CV PDF, et Recruteur avec données d'établissement.
Entités Annonces & Nomenclature
Poste regroupant 28 métiers CHR et Annonce stockant le type de contrat, salaire et description.
Entité Candidature
Liaison associant l'Annonce, le Candidat et le Consultant modérateur avec état de validation.