name('login'); Route::get('/auth/callback', [EntraLoginController::class, 'callback'])->name('auth.callback'); Route::post('/logout', [EntraLoginController::class, 'logout'])->name('logout')->middleware('auth'); // Portail agent (tout agent synchronisé) Route::middleware('auth')->group(function () { Route::get('/me', [PortalController::class, 'show'])->name('portal.home'); Route::put('/me', [PortalController::class, 'update'])->name('portal.update'); }); // Back-office : réseau interne + rôle éditeur minimum Route::prefix('admin')->middleware(['admin.network', 'auth', 'role:editor'])->name('admin.')->group(function () { Route::get('/', DashboardController::class)->name('dashboard'); // Templates — éditeur : brouillons ; administrateur : publication, défaut, suppression Route::get('/templates', [TemplateController::class, 'index'])->name('templates.index'); Route::get('/templates/create', [TemplateController::class, 'create'])->name('templates.create'); Route::post('/templates', [TemplateController::class, 'store'])->name('templates.store'); Route::post('/templates/preview', [TemplateController::class, 'preview'])->name('templates.preview'); Route::get('/templates/{template}', [TemplateController::class, 'edit'])->name('templates.edit'); Route::put('/templates/{template}', [TemplateController::class, 'update'])->name('templates.update'); Route::post('/templates/{template}/versions/{version}/restore', [TemplateController::class, 'restore'])->name('templates.restore'); // Images (logos, bannières) — éditeur : dépôt ; administrateur : suppression Route::get('/images', [ImageController::class, 'index'])->name('images.index'); Route::post('/images', [ImageController::class, 'store'])->name('images.store'); Route::middleware('role:admin')->group(function () { Route::post('/templates/{template}/publish', [TemplateController::class, 'publish'])->name('templates.publish'); Route::post('/templates/{template}/default', [TemplateController::class, 'makeDefault'])->name('templates.default'); Route::delete('/templates/{template}', [TemplateController::class, 'destroy'])->name('templates.destroy'); Route::get('/affectations', [AssignmentController::class, 'index'])->name('assignments.index'); Route::post('/affectations', [AssignmentController::class, 'store'])->name('assignments.store'); Route::put('/affectations/{assignment}', [AssignmentController::class, 'update'])->name('assignments.update'); Route::delete('/affectations/{assignment}', [AssignmentController::class, 'destroy'])->name('assignments.destroy'); Route::post('/synchro', SyncController::class)->name('sync'); Route::get('/champs', [EditableFieldController::class, 'index'])->name('fields.index'); Route::put('/champs', [EditableFieldController::class, 'update'])->name('fields.update'); Route::delete('/images/{name}', [ImageController::class, 'destroy'])->name('images.destroy')->where('name', '[A-Za-z0-9._-]+'); }); // Agents : simulation « qui reçoit quoi » et recherche pour l'aperçu Route::get('/agents', [AgentController::class, 'index'])->name('agents.index'); Route::get('/agents/recherche', [AgentController::class, 'lookup'])->name('agents.lookup'); Route::get('/agents/{agent}', [AgentController::class, 'show'])->name('agents.show'); });