🛡️ Contrôle d'accès - 0x485254/brief-26 GitHub Wiki
Empêcher un utilisateur connecté d'accéder aux listes créées par un autre utilisateur.
- La classe
JwtAuthFilter
extrait l’e-mail du token JWT et récupère l’utilisateur en base. - L’utilisateur est injecté dans le
SecurityContextHolder
. - Cela permet l’utilisation de
@AuthenticationPrincipal
dans les contrĂ´leurs.
@AuthenticationPrincipal User user
@GetMapping
public List<ListDto> getLists(@AuthenticationPrincipal User user) {
return listService.getListsByUser(user)
.stream()
.map(ListDto::new)
.toList();
}
➡️ Aucun userId
n’est fourni par le client.
➡️ Le backend utilise l’utilisateur connecté pour filtrer ses propres listes.
public List<UserList> getListsByUser(User user) {
return listRepository.findByUser(user); // Ne retourne que SES listes
}
Lorsqu’un utilisateur tente de récupérer une liste via /api/lists/{id}
:
public UserList getListOwnedByUser(User user, UUID listId) {
return listRepository.findById(listId)
.filter(list -> list.getUser().getId().equals(user.getId()))
.orElseThrow(() -> new ResponseStatusException(HttpStatus.FORBIDDEN));
}
➡️ Si l’utilisateur n’est pas le propriétaire de la liste, une erreur 403 Forbidden est levée.
Composant | RĂ´le |
---|---|
JwtAuthFilter |
Authentifie l’utilisateur via le JWT |
SecurityContextHolder |
Rend l’utilisateur disponible pour toute la requête |
@AuthenticationPrincipal |
Injecte automatiquement le User connecté dans les méthodes |
ListService.getListOwnedByUser |
Vérifie l’autorisation d’accès à la ressource |
Pas de userId côté frontend |
Évite le contournement de sécurité |
- ❌ Passer un
userId
en paramètre de requête (?userId=...
) - ❌ Ne pas vérifier le propriétaire d’une ressource
- ❌ Se fier uniquement au frontend pour gérer les droits