145 lines
3.2 KiB
Markdown
145 lines
3.2 KiB
Markdown
# 👤 CONCEPT: USER
|
|
|
|
## 📌 Vue d'ensemble
|
|
|
|
Le concept **USER** gère les utilisateurs, authentification, rôles et permissions via Keycloak.
|
|
|
|
**Importance**: ⭐⭐⭐⭐⭐ (Concept fondamental)
|
|
|
|
---
|
|
|
|
## 🗂️ Fichiers concernés
|
|
|
|
### **Entités JPA**
|
|
| Fichier | Description |
|
|
|---------|-------------|
|
|
| `User.java` | Entité principale utilisateur |
|
|
| `UserRole.java` | Enum (ADMIN, MANAGER, CHEF_CHANTIER, COMPTABLE, OUVRIER) |
|
|
| `UserStatus.java` | Enum (ACTIVE, INACTIVE, LOCKED, SUSPENDED) |
|
|
| `Permission.java` | Enum permissions |
|
|
|
|
### **Services**
|
|
| Fichier | Description |
|
|
|---------|-------------|
|
|
| `UserService.java` | Service métier utilisateurs |
|
|
| `PermissionService.java` | Service permissions |
|
|
|
|
### **Resources**
|
|
| Fichier | Description |
|
|
|---------|-------------|
|
|
| `UserResource.java` | API REST utilisateurs |
|
|
| `AuthResource.java` | API authentification |
|
|
|
|
---
|
|
|
|
## 📊 Modèle de données
|
|
|
|
```java
|
|
@Entity
|
|
@Table(name = "users")
|
|
public class User extends PanacheEntityBase {
|
|
@Id
|
|
@GeneratedValue(strategy = GenerationType.UUID)
|
|
private UUID id;
|
|
|
|
@Column(name = "keycloak_id", unique = true)
|
|
private String keycloakId;
|
|
|
|
@Column(name = "username", unique = true, nullable = false)
|
|
private String username;
|
|
|
|
@Column(name = "email", unique = true, nullable = false)
|
|
private String email;
|
|
|
|
@Column(name = "nom")
|
|
private String nom;
|
|
|
|
@Column(name = "prenom")
|
|
private String prenom;
|
|
|
|
@Enumerated(EnumType.STRING)
|
|
@Column(name = "role")
|
|
private UserRole role;
|
|
|
|
@Enumerated(EnumType.STRING)
|
|
@Column(name = "status")
|
|
private UserStatus status = UserStatus.ACTIVE;
|
|
|
|
@OneToOne
|
|
@JoinColumn(name = "employe_id")
|
|
private Employe employe;
|
|
}
|
|
```
|
|
|
|
### **Enum UserRole**
|
|
|
|
```java
|
|
public enum UserRole {
|
|
ADMIN, // Administrateur système
|
|
MANAGER, // Manager/Directeur
|
|
CHEF_CHANTIER, // Chef de chantier
|
|
COMPTABLE, // Comptable
|
|
OUVRIER // Ouvrier
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## 🔌 API REST
|
|
|
|
### **Endpoints**
|
|
|
|
| Méthode | Endpoint | Description |
|
|
|---------|----------|-------------|
|
|
| GET | `/api/v1/users` | Liste utilisateurs |
|
|
| GET | `/api/v1/users/{id}` | Détails |
|
|
| POST | `/api/v1/users` | Créer |
|
|
| PUT | `/api/v1/users/{id}` | Modifier |
|
|
| DELETE | `/api/v1/users/{id}` | Supprimer |
|
|
| GET | `/api/v1/users/me` | Utilisateur connecté |
|
|
| POST | `/api/v1/auth/login` | Connexion |
|
|
| POST | `/api/v1/auth/logout` | Déconnexion |
|
|
|
|
---
|
|
|
|
## 💻 Exemples
|
|
|
|
### **Créer un utilisateur**
|
|
|
|
```bash
|
|
curl -X POST http://localhost:8080/api/v1/users \
|
|
-H "Content-Type: application/json" \
|
|
-d '{
|
|
"username": "jdupont",
|
|
"email": "jean.dupont@btpxpress.fr",
|
|
"nom": "Dupont",
|
|
"prenom": "Jean",
|
|
"role": "CHEF_CHANTIER",
|
|
"password": "SecurePass123!"
|
|
}'
|
|
```
|
|
|
|
### **Utilisateur connecté**
|
|
|
|
```bash
|
|
curl -X GET http://localhost:8080/api/v1/users/me \
|
|
-H "Authorization: Bearer $TOKEN"
|
|
```
|
|
|
|
---
|
|
|
|
## 🔐 Authentification
|
|
|
|
L'authentification se fait via **Keycloak** avec OAuth2/OIDC :
|
|
|
|
1. L'utilisateur se connecte via Keycloak
|
|
2. Keycloak retourne un JWT token
|
|
3. Le token est envoyé dans le header `Authorization: Bearer <token>`
|
|
4. Le backend valide le token auprès de Keycloak
|
|
|
|
---
|
|
|
|
**Dernière mise à jour**: 2025-09-30
|
|
**Version**: 1.0
|
|
|