Plateforme complète de gestion des ressources humaines composée de deux applications Laravel distinctes avec authentification SSO Keycloak.
Projet-SSO
├── gestion-client/ # Application principale de gestion RH
└── mailbox/ # Système de messagerie interne
Application principale de gestion des ressources humaines avec :
- Authentification SSO : Intégration Keycloak avec OAuth 2.0 / OpenID Connect
- Gestion des employés : CRUD complet avec profils détaillés
- Gestion des absences : Demandes, validation, rejet par les administrateurs
- Gestion des présences : Suivi automatique des heures d'arrivée et de départ
- Gestion des salaires : Calcul automatique avec primes et retenues
- Gestion des documents : Stockage et organisation des documents employés
- Dashboard Admin : Vue d'ensemble pour les administrateurs
- Dashboard Employee : Interface personnalisée pour les employés
- Notifications temps réel : Système de notifications avec Laravel Broadcasting et Pusher
- Événements : UserRegistered, UserValidated, UserRejected, SalaireValidated
Système de messagerie interne avec :
- Boîte de réception : Messages reçus avec gestion de lecture
- Messages envoyés : Historique des messages envoyés
- Brouillons : Gestion des messages en cours de rédaction
- Corbeille : Gestion des messages supprimés
- Recherche : Recherche de messages
- Favoris : Marquage des messages importants
- Réponse/Transfert : Fonctionnalités de réponse et transfert
- Communication interne : Messagerie entre utilisateurs
- Intégration SSO : Authentification Keycloak unifiée
- PHP 8.1+
- Laravel 10.10
- PostgreSQL (gestion-client)
- SQLite (mailbox)
- PHPUnit 10.1 (tests backend)
- Laravel Socialite (OAuth Keycloak)
- SocialiteProviders/Keycloak (intégration Keycloak)
- Laravel Broadcasting (notifications temps réel)
- Pusher (WebSockets)
- JavaScript (ES6+)
- Jasmine 5.5.0 (tests unitaires frontend)
- Playwright 1.62.1 (tests E2E)
- Vite 5.0.0 (build frontend)
- Bootstrap (framework CSS)
- Keycloak (SSO / OAuth 2.0 / OpenID Connect)
- Laravel Sanctum (API authentication)
- Gestion des rôles : ROLE_ADMIN, ROLE_EMPLOYEE
- Single Sign-On (SSO) : Authentification centralisée via Keycloak
- OAuth 2.0 / OpenID Connect : Protocoles standard de sécurité
- Gestion des rôles : Les rôles sont extraits du JWT Keycloak
- Auto-activation : Les utilisateurs avec des rôles valides sont automatiquement activés
- Session sécurisée : Configuration avancée des sessions pour éviter les expirations
- Redirection vers Keycloak (
/auth/keycloak/redirect) - Authentification utilisateur sur Keycloak
- Callback avec token JWT (
/auth/callback) - Extraction des rôles et création/mise à jour de l'utilisateur
- Redirection vers le dashboard approprié
- gestion-client : 2 tests passing
- mailbox : 30 tests passing (Unit), 17 tests Feature (configuration APP_KEY requise)
- gestion-client : 305 specs passing, 0 failures
- gestion-client : Suite complète de tests E2E pour :
- Authentification SSO
- Gestion des employés
- Gestion des absences
- Gestion des salaires
- WebSockets et notifications
- PHP 8.1 ou supérieur
- Composer
- Node.js et npm
- PostgreSQL (pour gestion-client)
- Keycloak instance
- Pusher (pour les notifications temps réel)
git clone https://github.com/bouthaynakhammasi/ProjetKeycloak.git
cd Projet-SSOcd gestion-client
composer install
npm install
cp .env.example .env
php artisan key:generateAPP_NAME="Gestion Client"
APP_URL=http://localhost:8000
# Base de données PostgreSQL
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=gestion_client
DB_USERNAME=your_db_username
DB_PASSWORD=your_db_password
# Configuration Keycloak
KEYCLOAK_CLIENT_ID=gestion-client
KEYCLOAK_CLIENT_SECRET=your_keycloak_client_secret
KEYCLOAK_REDIRECT_URI=http://localhost:8000/auth/callback
KEYCLOAK_REALM=CompanyRealm
KEYCLOAK_BASE_URL=http://localhost:8080
KEYCLOAK_SCOPES=openid,profile,email
# Configuration Pusher (notifications temps réel)
PUSHER_APP_ID=your_pusher_app_id
PUSHER_APP_KEY=your_pusher_app_key
PUSHER_APP_SECRET=your_pusher_app_secret
PUSHER_HOST=127.0.0.1
PUSHER_PORT=6001
PUSHER_SCHEME=http
BROADCAST_DRIVER=pusherphp artisan migrate
php artisan db:seedcd ../mailbox
composer install
npm install
cp .env.example .env
php artisan key:generateAPP_NAME="Mailbox"
APP_URL=http://localhost:8001
# Base de données SQLite
DB_CONNECTION=sqlite
DB_DATABASE=database/database.sqlite
# Configuration Keycloak
KEYCLOAK_CLIENT_ID=mailbox
KEYCLOAK_CLIENT_SECRET=your_keycloak_client_secret
KEYCLOAK_REDIRECT_URI=http://localhost:8001/auth/callback
KEYCLOAK_REALM=CompanyRealm
KEYCLOAK_BASE_URL=http://localhost:8080
KEYCLOAK_SCOPES=openid,profile,emailphp artisan migrate
php artisan db:seedTerminal 1 - gestion-client :
cd gestion-client
php artisan serve
npm run devTerminal 2 - mailbox :
cd mailbox
php artisan serve --port=8001
npm run devTerminal 3 - Pusher (pour les notifications temps réel) :
cd gestion-client
npx pusher-cli startCréer deux clients Keycloak :
Client gestion-client :
- Client ID:
gestion-client - Client Secret:
your_keycloak_client_secret - Valid Redirect URIs:
http://localhost:8000/auth/callback - Enabled: true
Client mailbox :
- Client ID:
mailbox - Client Secret:
your_keycloak_client_secret - Valid Redirect URIs:
http://localhost:8001/auth/callback - Enabled: true
Créer les rôles dans le realm :
ROLE_ADMINROLE_EMPLOYEE
# gestion-client
cd gestion-client
php artisan test
# mailbox
cd mailbox
php artisan testcd gestion-client
npm testcd gestion-client
npx playwright test- ROLE_ADMIN : Accès complet au dashboard admin, gestion des employés, validation des absences, gestion des salaires
- ROLE_EMPLOYEE : Accès au dashboard employé, demande d'absences, consultation des présences, visualisation des salaires
- Aucun rôle : Compte en attente de validation par l'administrateur
- Authentification SSO : Centralisée via Keycloak
- Gestion des sessions : Configuration avancée pour éviter les expirations
- Protection CSRF : Activée par défaut dans Laravel
- Validation des rôles : Middleware de vérification des rôles Keycloak
- Isolation des données : Chaque utilisateur ne voit que ses propres données (mailbox)
Pour éviter les erreurs de session expirée lors du flux OAuth :
SESSION_LIFETIME=480(8 heures)SESSION_DRIVER=fileSESSION_SAME_SITE=lax
Pour toute question ou problème, veuillez contacter l'équipe de développement.
MIT License