From 87496bde561e5a73f9bc622c1e88f41414248d22 Mon Sep 17 00:00:00 2001 From: truettwo Date: Thu, 20 Feb 2025 10:59:05 +0300 Subject: [PATCH] /info works )) --- .../com/example/nto/config/SecurityConfig.java | 4 ++-- .../nto/controller/EmployeeController.java | 18 +++++++++++++++--- src/main/java/com/example/nto/entity/Code.java | 2 +- .../java/com/example/nto/entity/Employee.java | 2 +- .../nto/service/impl/EmployeeServiceImpl.java | 6 +++--- 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/example/nto/config/SecurityConfig.java b/src/main/java/com/example/nto/config/SecurityConfig.java index 4c62e64..0076ed0 100644 --- a/src/main/java/com/example/nto/config/SecurityConfig.java +++ b/src/main/java/com/example/nto/config/SecurityConfig.java @@ -39,8 +39,8 @@ public class SecurityConfig { Employee emp = employee.get(); return User.builder() .username(emp.getLogin()) - .password(emp.getPassword()) // Пароль должен быть в BCrypt - .roles(emp.getRole().toUpperCase()) // Spring Security требует `ROLE_XXX` + .password(emp.getPassword()) + .roles(emp.getRole().toUpperCase()) .build(); }; } diff --git a/src/main/java/com/example/nto/controller/EmployeeController.java b/src/main/java/com/example/nto/controller/EmployeeController.java index b43c59e..46defd8 100644 --- a/src/main/java/com/example/nto/controller/EmployeeController.java +++ b/src/main/java/com/example/nto/controller/EmployeeController.java @@ -4,6 +4,7 @@ import com.example.nto.entity.Employee; import com.example.nto.service.EmployeeService; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.core.Authentication; import org.springframework.web.bind.annotation.*; import java.util.Optional; @@ -34,15 +35,26 @@ public class EmployeeController { // Получение информации о пользователе @PreAuthorize("isAuthenticated()") @GetMapping("/{login}/info") - public ResponseEntity getUserInfo(@PathVariable String login) { + public ResponseEntity getUserInfo(@PathVariable String login, Authentication authentication) { Optional employee = employeeService.findByLogin(login); + if (employee.isPresent()) { - return ResponseEntity.ok(employee.get()); + Employee requestedUser = employee.get(); + String currentUserLogin = authentication.getName(); // Логин текущего пользователя + boolean isAdmin = authentication.getAuthorities().stream() + .anyMatch(grantedAuthority -> grantedAuthority.getAuthority().equals("ROLE_ADMIN")); + + // Обычный пользователь может смотреть только свои данные, админ — любые + if (isAdmin || currentUserLogin.equals(requestedUser.getLogin())) { + return ResponseEntity.ok(requestedUser); + } else { + return ResponseEntity.status(403).body("Access denied"); + } } return ResponseEntity.status(404).body("User not found"); } - // Получение списка всех сотрудников (только для администратора) + // не тз не трогаем!!!! @PreAuthorize("hasRole('ADMIN')") @GetMapping("/workers") public ResponseEntity getAllWorkers() { diff --git a/src/main/java/com/example/nto/entity/Code.java b/src/main/java/com/example/nto/entity/Code.java index 5455481..047ebe7 100644 --- a/src/main/java/com/example/nto/entity/Code.java +++ b/src/main/java/com/example/nto/entity/Code.java @@ -14,5 +14,5 @@ public class Code { @JoinColumn(name = "employee_id", nullable = false) private Employee employee; - // Геттеры и сеттеры + } \ No newline at end of file diff --git a/src/main/java/com/example/nto/entity/Employee.java b/src/main/java/com/example/nto/entity/Employee.java index 4f59d23..3398467 100644 --- a/src/main/java/com/example/nto/entity/Employee.java +++ b/src/main/java/com/example/nto/entity/Employee.java @@ -34,7 +34,7 @@ public class Employee { @Column(nullable = false) private String status = "works"; // Новый статус: 'works' или 'blocked' - + //ту ду реши что оставить из этих двоих public boolean isBlocked() { return "blocked".equals(status); diff --git a/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java b/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java index 10267fd..0f9830d 100644 --- a/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java +++ b/src/main/java/com/example/nto/service/impl/EmployeeServiceImpl.java @@ -31,14 +31,14 @@ public class EmployeeServiceImpl implements EmployeeService { } @Override - public boolean validateCode(String login, long code) { + public boolean validateCode(String login, long code) { //не робит(((( List validCodes = CodeRepository.findCodesByLogin(login); // Теперь вызывается из объекта - // Проверяем, если переданный код присутствует в списке + // Проверяем, если переданный код присутствует в списке() boolean isValid = validCodes.contains(code); - // Вывод отладочной информации + // Вывод отладочной информации(удалить) System.out.println("Valid codes: " + validCodes); System.out.println("Input code: " + code);