summaryrefslogtreecommitdiff
path: root/spring-boot/10-role-based-security/src/main/java/com/example/spring/security/controllers/UserController.java
blob: 638a641deabed5230bbf912ae2011a9630fb84a6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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<User> 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<User> 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";
    }
}