Checkpoint: Ajout des permissions de gestion des attestations pour les formateurs et super-formateurs : création de formateurProcedure, fonction canAccessSequence pour vérifier les accès par séquence, modification des procédures uploadDocument, deleteDocument, sendAttestation et sendAllAttestations avec vérifications de permissions

This commit is contained in:
Manus
2026-02-02 09:53:28 -05:00
parent fadadf0d7d
commit 42d57c6e7c
3 changed files with 83 additions and 11 deletions

View File

@@ -1,6 +1,36 @@
import { eq, desc, and } from "drizzle-orm";
import { eq, desc, and, isNotNull, sql } from "drizzle-orm";
import { getDb } from "./db";
import { formations, attestations, inscriptions, apprenants, sequences, datesFormation } from "../drizzle/schema";
import { formations, attestations, inscriptions, apprenants, sequences, datesFormation, users } from "../drizzle/schema";
/**
* Vérifier si un utilisateur a accès à une séquence
* - Admins et super_formateurs : accès à tout
* - Formateurs : accès uniquement à leurs séquences assignées
*/
export async function canAccessSequence(userId: number, userRole: string, sequenceId: number): Promise<boolean> {
// Admins et super-formateurs ont accès à tout
if (userRole === 'admin' || userRole === 'super_formateur') {
return true;
}
// Pour les formateurs, vérifier s'ils sont assignés à cette séquence
if (userRole === 'formateur') {
const db = await getDb();
if (!db) return false;
// Récupérer le formateurId de l'utilisateur
const user = await db.select({ formateurId: users.formateurId }).from(users).where(eq(users.id, userId)).limit(1);
if (user.length === 0 || !user[0].formateurId) return false;
// Vérifier si le formateur est assigné à cette séquence
const sequence = await db.select({ formateurId: sequences.formateurId }).from(sequences).where(eq(sequences.id, sequenceId)).limit(1);
if (sequence.length === 0) return false;
return sequence[0].formateurId === user[0].formateurId;
}
return false;
}
/**
* Récupérer la configuration d'une formation