Initial commit
This commit is contained in:
144
docs/concepts/17-USER.md
Normal file
144
docs/concepts/17-USER.md
Normal file
@@ -0,0 +1,144 @@
|
||||
# 👤 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
|
||||
|
||||
Reference in New Issue
Block a user