← Retour à la marketplace
🔐

Auth + RBAC

⭐ Recommandé

Authentification complète avec contrôle d'accès par rôle (RBAC).

AuthMoyen~5 joursv1.1.0

Système d'authentification JWT avec gestion des rôles (ADMIN, MANAGER, USER), permissions granulaires par ressource, sessions sécurisées, réinitialisation de mot de passe et middleware de protection des routes.

authjwtrolespermissionssecurity

📋 Schéma Prisma

// === Module Auth + RBAC ===

enum UserRole {
  SUPER_ADMIN
  ADMIN
  MANAGER
  USER
  GUEST
}

model User {
  id            String    @id @default(cuid())
  email         String    @unique
  passwordHash  String
  name          String
  role          UserRole  @default(USER)
  emailVerified Boolean   @default(false)
  lastLoginAt   DateTime?
  createdAt     DateTime  @default(now())
  updatedAt     DateTime  @updatedAt
  sessions      UserSession[]
  auditLogs     UserAuditLog[]

  @@map("users")
}

model UserSession {
  id        String   @id @default(cuid())
  userId    String
  user      User     @relation(fields: [userId], references: [id], onDelete: Cascade)
  token     String   @unique
  expiresAt DateTime
  ipAddress String?
  userAgent String?
  createdAt DateTime @default(now())

  @@map("user_sessions")
}

model Permission {
  id          String   @id @default(cuid())
  resource    String   // ex: "invoice", "customer"
  action      String   // ex: "create", "read", "update", "delete"
  roleAllowed UserRole
  createdAt   DateTime @default(now())

  @@unique([resource, action, roleAllowed])
  @@map("permissions")
}

🔌 Endpoints API

## API Auth + RBAC

### Authentification
POST /api/auth/register       # Créer un compte
POST /api/auth/login          # Connexion (retourne JWT)
POST /api/auth/logout         # Invalider la session
POST /api/auth/refresh        # Renouveler le token
POST /api/auth/forgot-password # Demander reset mot de passe
POST /api/auth/reset-password  # Appliquer le nouveau mot de passe

### Utilisateurs (admin)
GET  /api/admin/users         # Liste des utilisateurs
POST /api/admin/users         # Créer un utilisateur
PUT  /api/admin/users/:id     # Modifier
PUT  /api/admin/users/:id/role # Changer le rôle
DELETE /api/admin/users/:id   # Supprimer

### Permissions
GET  /api/admin/permissions   # Liste des permissions par rôle
POST /api/admin/permissions   # Ajouter une permission
DELETE /api/admin/permissions/:id # Supprimer

🛠️ Guide d'implémentation

## Implémentation Auth + RBAC

### Étape 1 — Dépendances
```bash
npm install bcryptjs jsonwebtoken @types/bcryptjs @types/jsonwebtoken
```

### Étape 2 — Middleware d'authentification
Créer `src/middleware/auth.ts` :
- Extraire le JWT du header Authorization ou cookie
- Vérifier la signature avec JWT_SECRET
- Attacher l'utilisateur à la requête

### Étape 3 — Middleware RBAC
Créer `src/middleware/rbac.ts` :
- Vérifier le rôle de l'utilisateur
- Vérifier les permissions granulaires (table permissions)
- Retourner 403 si non autorisé

### Étape 4 — Routes d'authentification
Implémenter les routes dans `src/app/api/auth/`
- Hash bcrypt (coût 12) pour les mots de passe
- JWT avec expiration 24h (access) + 30j (refresh)
- Cookies httpOnly, secure, sameSite=strict

### Étape 5 — Seed des rôles et permissions
Créer `prisma/seeds/permissions.ts` avec les permissions par défaut par rôle.

### Variables d'environnement requises
```
JWT_SECRET=<random-32-bytes>
JWT_REFRESH_SECRET=<random-32-bytes>
JWT_EXPIRES_IN=24h
```

Prêt à installer ce module ?

Ajoutez-le à un projet existant depuis la page modules du projet.

Voir les projets →