diff --git a/src/main/java/net/sytes/kashey/sweater/config/WebSecurityConfig.java b/src/main/java/net/sytes/kashey/sweater/config/WebSecurityConfig.java index 00f9ffd..d63cdc8 100644 --- a/src/main/java/net/sytes/kashey/sweater/config/WebSecurityConfig.java +++ b/src/main/java/net/sytes/kashey/sweater/config/WebSecurityConfig.java @@ -1,18 +1,16 @@ package net.sytes.kashey.sweater.config; -import net.sytes.kashey.sweater.service.CustomUserDetailsService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configurers.LogoutConfigurer; import org.springframework.security.web.SecurityFilterChain; -import javax.sql.DataSource; - @Configuration @EnableWebSecurity +@EnableMethodSecurity public class WebSecurityConfig { @Bean diff --git a/src/main/java/net/sytes/kashey/sweater/controller/UserController.java b/src/main/java/net/sytes/kashey/sweater/controller/UserController.java new file mode 100644 index 0000000..6b9adf6 --- /dev/null +++ b/src/main/java/net/sytes/kashey/sweater/controller/UserController.java @@ -0,0 +1,59 @@ +package net.sytes.kashey.sweater.controller; + +import net.sytes.kashey.sweater.domain.Role; +import net.sytes.kashey.sweater.domain.User; +import net.sytes.kashey.sweater.repository.UserRepository; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.*; + +import java.util.Arrays; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +@Controller +@RequestMapping("/users") +@PreAuthorize("hasAuthority('ADMIN')") +public class UserController { + + private final UserRepository userRepository; + + public UserController(UserRepository userRepository) { + + this.userRepository = userRepository; + } + + @GetMapping + public String getAllUsers(Model model) { + + model.addAttribute("users", userRepository.findAll()); + return "userList"; + } + + @GetMapping("/{user}") + public String editUser(@PathVariable User user, Model model) { + + model.addAttribute("user", user); + model.addAttribute("roles", Role.values()); + return "userEdit"; + } + + @PostMapping + public String updateUser(@RequestParam String username, + @RequestParam Map form, + @RequestParam("userId") User user) { + + user.setUsername(username); + user.getRoles().clear(); + Set roles = Arrays.stream(Role.values()).map(Enum::name).collect(Collectors.toSet()); + for (String role : form.keySet()) { + if (roles.contains(role)) { + user.getRoles().add(Role.valueOf(role)); + } + } + userRepository.save(user); + return "redirect:/users"; + } +} \ No newline at end of file diff --git a/src/main/resources/templates/greeting.ftl b/src/main/resources/templates/greeting.ftl index 7cb7a07..b19ebf4 100644 --- a/src/main/resources/templates/greeting.ftl +++ b/src/main/resources/templates/greeting.ftl @@ -1,5 +1,7 @@ <#import "parts/common.ftl" as com> <@com.page> -
Hello there
-Main page +
Hello there
+ Main page +
+ Users page \ No newline at end of file diff --git a/src/main/resources/templates/main.ftl b/src/main/resources/templates/main.ftl index f7754d3..42b9786 100644 --- a/src/main/resources/templates/main.ftl +++ b/src/main/resources/templates/main.ftl @@ -3,6 +3,7 @@ <@com.page>
<@l.logout /> + Users page
@@ -33,4 +34,5 @@ <#else> No messages found +
\ No newline at end of file diff --git a/src/main/resources/templates/userEdit.ftl b/src/main/resources/templates/userEdit.ftl new file mode 100644 index 0000000..3ed4e12 --- /dev/null +++ b/src/main/resources/templates/userEdit.ftl @@ -0,0 +1,14 @@ +<#import "parts/common.ftl" as com> +<@com.page> +
+ + <#list roles as role> +
+ +
+ + + + +
+ \ No newline at end of file diff --git a/src/main/resources/templates/userList.ftl b/src/main/resources/templates/userList.ftl new file mode 100644 index 0000000..4fd5ed1 --- /dev/null +++ b/src/main/resources/templates/userList.ftl @@ -0,0 +1,23 @@ +<#import "parts/common.ftl" as com> +<@com.page> +
Users
+ + + + + + + + + + <#list users as user> + + + + + + + +
NameRole
${user.username}<#list user.roles as role>${role}<#sep>, edit
+ Main page + \ No newline at end of file