From 8d4c5e1b3ab5fd5f7a7ecd3d8982c276fef3ec7e Mon Sep 17 00:00:00 2001 From: Leonid Date: Mon, 10 Feb 2025 12:17:59 +0300 Subject: [PATCH] =?UTF-8?q?-=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BD=D0=B0=D0=B7=D0=BD=D0=B0=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D1=80=D0=BE=D0=BB=D0=B5=D0=B9=20=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D1=8F=D0=BC.?= =?UTF-8?q?=20-=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=BD=D1=82=D1=80=D0=BE=D0=BB=D0=BB=D0=B5=D1=80=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D1=83=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D1=82=D0=B5=D0=BB=D1=8F=D0=BC=D0=B8=20=D0=B8=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BF=D1=80=D0=B5=D1=82=20=D0=B4=D0=BE=D1=81=D1=82=D1=83=D0=BF?= =?UTF-8?q?=D0=B0=20=D0=BA=20=D0=BD=D0=B5=D0=BC=D1=83=20=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D1=8F=D0=BC=20?= =?UTF-8?q?=D0=B1=D0=B5=D0=B7=20=D1=80=D0=BE=D0=BB=D0=B8=20ADMIN.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit https://www.youtube.com/watch?v=6dteOGWy4uk&list=PLU2ftbIeotGpAYRP9Iv2KLIwK36-o_qYk&index=9 Использовал аннотацию @EnableMethodSecurity вместо deprecated @EnableGlobalMethodSecurity --- .../sweater/config/WebSecurityConfig.java | 6 +- .../sweater/controller/UserController.java | 59 +++++++++++++++++++ src/main/resources/templates/greeting.ftl | 6 +- src/main/resources/templates/main.ftl | 2 + src/main/resources/templates/userEdit.ftl | 14 +++++ src/main/resources/templates/userList.ftl | 23 ++++++++ 6 files changed, 104 insertions(+), 6 deletions(-) create mode 100644 src/main/java/net/sytes/kashey/sweater/controller/UserController.java create mode 100644 src/main/resources/templates/userEdit.ftl create mode 100644 src/main/resources/templates/userList.ftl 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