package com.example.spring.security.controllers; import java.util.List; import java.util.Optional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import com.example.spring.security.entity.User; import com.example.spring.security.service.UserService; import jakarta.validation.Valid; @Controller public class UserController { @Autowired private UserService userService; @GetMapping("/security/users") @PreAuthorize("hasRole('ADMIN')") public String showUsers(Model model) { List users = userService.findAll(); model.addAttribute("users", users); return "security/users"; } @GetMapping("/security/user/update/{id}") @PreAuthorize("hasRole('ADMIN')") public String showEditForm(@PathVariable Long id, Model model) { Optional userOpt = userService.findById(id); User user = userOpt.get(); UserForm form = new UserForm(); form.setId(user.getId()); form.setUsername(user.getUsername()); form.setDescription(user.getDescription()); model.addAttribute("userForm", form); return "security/user-form"; } @PostMapping("/security/user/update") @PreAuthorize("hasRole('ADMIN')") public String updateUser(@Valid @ModelAttribute UserForm userForm, BindingResult bindingResult, Model model) { if (bindingResult.hasErrors()) { return "security/user-form"; } userService.updateUser(userForm.getId(), userForm.getDescription()); return "redirect:/security/users"; } }