/info works ))

This commit is contained in:
truettwo 2025-02-20 10:59:05 +03:00
parent 0137ba0bb2
commit 87496bde56
5 changed files with 22 additions and 10 deletions

View File

@ -39,8 +39,8 @@ public class SecurityConfig {
Employee emp = employee.get(); Employee emp = employee.get();
return User.builder() return User.builder()
.username(emp.getLogin()) .username(emp.getLogin())
.password(emp.getPassword()) // Пароль должен быть в BCrypt .password(emp.getPassword())
.roles(emp.getRole().toUpperCase()) // Spring Security требует `ROLE_XXX` .roles(emp.getRole().toUpperCase())
.build(); .build();
}; };
} }

View File

@ -4,6 +4,7 @@ import com.example.nto.entity.Employee;
import com.example.nto.service.EmployeeService; import com.example.nto.service.EmployeeService;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.Authentication;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.Optional; import java.util.Optional;
@ -34,15 +35,26 @@ public class EmployeeController {
// Получение информации о пользователе // Получение информации о пользователе
@PreAuthorize("isAuthenticated()") @PreAuthorize("isAuthenticated()")
@GetMapping("/{login}/info") @GetMapping("/{login}/info")
public ResponseEntity<?> getUserInfo(@PathVariable String login) { public ResponseEntity<?> getUserInfo(@PathVariable String login, Authentication authentication) {
Optional<Employee> employee = employeeService.findByLogin(login); Optional<Employee> employee = employeeService.findByLogin(login);
if (employee.isPresent()) { 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"); return ResponseEntity.status(404).body("User not found");
} }
// Получение списка всех сотрудников (только для администратора) // не тз не трогаем!!!!
@PreAuthorize("hasRole('ADMIN')") @PreAuthorize("hasRole('ADMIN')")
@GetMapping("/workers") @GetMapping("/workers")
public ResponseEntity<?> getAllWorkers() { public ResponseEntity<?> getAllWorkers() {

View File

@ -14,5 +14,5 @@ public class Code {
@JoinColumn(name = "employee_id", nullable = false) @JoinColumn(name = "employee_id", nullable = false)
private Employee employee; private Employee employee;
// Геттеры и сеттеры
} }

View File

@ -34,7 +34,7 @@ public class Employee {
@Column(nullable = false) @Column(nullable = false)
private String status = "works"; // Новый статус: 'works' или 'blocked' private String status = "works"; // Новый статус: 'works' или 'blocked'
//ту ду реши что оставить из этих двоих
public boolean isBlocked() { public boolean isBlocked() {
return "blocked".equals(status); return "blocked".equals(status);

View File

@ -31,14 +31,14 @@ public class EmployeeServiceImpl implements EmployeeService {
} }
@Override @Override
public boolean validateCode(String login, long code) { public boolean validateCode(String login, long code) { //не робит((((
List<Long> validCodes = CodeRepository.findCodesByLogin(login); // Теперь вызывается из объекта List<Long> validCodes = CodeRepository.findCodesByLogin(login); // Теперь вызывается из объекта
// Проверяем, если переданный код присутствует в списке // Проверяем, если переданный код присутствует в списке()
boolean isValid = validCodes.contains(code); boolean isValid = validCodes.contains(code);
// Вывод отладочной информации // Вывод отладочной информации(удалить)
System.out.println("Valid codes: " + validCodes); System.out.println("Valid codes: " + validCodes);
System.out.println("Input code: " + code); System.out.println("Input code: " + code);