feat: gestion des utilisateurs, rôles et équipes
- Ajout de la section de gestion des utilisateurs avec rôles (Admin, Trésorerie, Agent de Saisie). - Restriction des accès par rôle (Admin a tout, Trésorerie a adhérents/paiements, Agent de saisie a adhérents/planning). - Flux de modification obligatoire de mot de passe temporaire au premier login (par défaut AsTalange123). - Intégration de la configuration des équipes du club.
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
package com.astalange.web.controller;
|
||||
|
||||
import com.astalange.core.entity.AppUser;
|
||||
import com.astalange.core.entity.Role;
|
||||
import com.astalange.core.repository.AppUserRepository;
|
||||
import com.astalange.core.repository.RoleRepository;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
@Controller
|
||||
@RequestMapping("/utilisateurs")
|
||||
public class UtilisateurController {
|
||||
|
||||
private final AppUserRepository userRepository;
|
||||
private final RoleRepository roleRepository;
|
||||
private final PasswordEncoder passwordEncoder;
|
||||
|
||||
public UtilisateurController(AppUserRepository userRepository, RoleRepository roleRepository, PasswordEncoder passwordEncoder) {
|
||||
this.userRepository = userRepository;
|
||||
this.roleRepository = roleRepository;
|
||||
this.passwordEncoder = passwordEncoder;
|
||||
}
|
||||
|
||||
@GetMapping
|
||||
public String listUsers(Model model) {
|
||||
List<AppUser> users = userRepository.findAll();
|
||||
model.addAttribute("users", users);
|
||||
return "utilisateurs/list";
|
||||
}
|
||||
|
||||
@GetMapping("/ajouter")
|
||||
public String showAddForm(Model model) {
|
||||
model.addAttribute("username", "");
|
||||
model.addAttribute("defaultPassword", "AsTalange123");
|
||||
model.addAttribute("roles", roleRepository.findAll());
|
||||
return "utilisateurs/form";
|
||||
}
|
||||
|
||||
@PostMapping("/ajouter")
|
||||
public String addUser(
|
||||
@RequestParam String username,
|
||||
@RequestParam String password,
|
||||
@RequestParam Long roleId,
|
||||
RedirectAttributes redirectAttributes,
|
||||
Model model) {
|
||||
|
||||
if (userRepository.findByUsername(username).isPresent()) {
|
||||
model.addAttribute("error", "Nom d'utilisateur déjà utilisé.");
|
||||
model.addAttribute("username", username);
|
||||
model.addAttribute("defaultPassword", password);
|
||||
model.addAttribute("roles", roleRepository.findAll());
|
||||
return "utilisateurs/form";
|
||||
}
|
||||
|
||||
Role role = roleRepository.findById(roleId)
|
||||
.orElseThrow(() -> new IllegalArgumentException("Rôle invalide: " + roleId));
|
||||
|
||||
AppUser appUser = new AppUser();
|
||||
appUser.setUsername(username);
|
||||
appUser.setPassword(passwordEncoder.encode(password));
|
||||
appUser.setEnabled(true);
|
||||
appUser.setMustChangePassword(true);
|
||||
appUser.setRoles(Set.of(role));
|
||||
|
||||
userRepository.save(appUser);
|
||||
|
||||
redirectAttributes.addFlashAttribute("success", "Utilisateur créé avec succès !");
|
||||
return "redirect:/utilisateurs";
|
||||
}
|
||||
|
||||
@PostMapping("/{id}/delete")
|
||||
public String deleteUser(@PathVariable Long id, RedirectAttributes redirectAttributes) {
|
||||
AppUser appUser = userRepository.findById(id)
|
||||
.orElseThrow(() -> new IllegalArgumentException("Utilisateur non trouvé"));
|
||||
|
||||
org.springframework.security.core.Authentication auth = org.springframework.security.core.context.SecurityContextHolder.getContext().getAuthentication();
|
||||
if (auth != null && auth.getName().equals(appUser.getUsername())) {
|
||||
redirectAttributes.addFlashAttribute("error", "Vous ne pouvez pas supprimer votre propre compte.");
|
||||
return "redirect:/utilisateurs";
|
||||
}
|
||||
|
||||
userRepository.delete(appUser);
|
||||
redirectAttributes.addFlashAttribute("success", "Utilisateur supprimé avec succès.");
|
||||
return "redirect:/utilisateurs";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user