diff --git a/src/main/java/com/example/fercoganbackend/configuration/SecurityConfig.java b/src/main/java/com/example/fercoganbackend/configuration/SecurityConfig.java index a0554c8..c426a3e 100644 --- a/src/main/java/com/example/fercoganbackend/configuration/SecurityConfig.java +++ b/src/main/java/com/example/fercoganbackend/configuration/SecurityConfig.java @@ -43,6 +43,7 @@ public class SecurityConfig { .requestMatchers("/ws/**").permitAll() // WebSocket .requestMatchers("/auth/**").permitAll() .requestMatchers("/favicon.ico", "/error", "/static/**", "/contador/**", "/api/**").permitAll() + .requestMatchers("/admin/**").hasRole("ADMIN") .anyRequest().authenticated() ) .httpBasic(Customizer.withDefaults()); diff --git a/src/main/java/com/example/fercoganbackend/controller/UserController.java b/src/main/java/com/example/fercoganbackend/controller/UserController.java index c1fb159..ab5a560 100644 --- a/src/main/java/com/example/fercoganbackend/controller/UserController.java +++ b/src/main/java/com/example/fercoganbackend/controller/UserController.java @@ -1,6 +1,7 @@ package com.example.fercoganbackend.controller; import com.example.fercoganbackend.entity.Rol; +import com.example.fercoganbackend.entity.Roles; import com.example.fercoganbackend.entity.Usuario; import com.example.fercoganbackend.otros.ConfirmadoTF; import com.example.fercoganbackend.service.UsuarioService; @@ -31,7 +32,7 @@ public class UserController { // ✅ Registrar nuevo usuario @PostMapping("/registrar") public Usuario registrarUsuario(@RequestBody UsuarioRequest request) { - return service.registrarUsuario(request.getUsername(), request.getPassword(), request.getRoles()); + return service.registrarUsuario(request.getUsername(), request.getPassword(), request.getRoles(), request.getRol() ); } // ✅ Listar usuarios pendientes (no aprobados) @@ -85,11 +86,21 @@ public class UserController { } + // ✅ DTO interno para registro public static class UsuarioRequest { private String username; private String password; - private Set roles; + private Set roles; //ignora esto + private Long rolId; + + public Long getRol() { + return rolId; + } + + public void setRol(Long rol) { + this.rolId = rol; + } public String getUsername() { return username; diff --git a/src/main/java/com/example/fercoganbackend/entity/Roles.java b/src/main/java/com/example/fercoganbackend/entity/Roles.java new file mode 100644 index 0000000..92c7f81 --- /dev/null +++ b/src/main/java/com/example/fercoganbackend/entity/Roles.java @@ -0,0 +1,32 @@ +package com.example.fercoganbackend.entity; + +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; + +@Entity +public class Roles { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long Id; + + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Long getId() { + return Id; + } + + public void setId(Long id) { + Id = id; + } +} diff --git a/src/main/java/com/example/fercoganbackend/entity/Usuario.java b/src/main/java/com/example/fercoganbackend/entity/Usuario.java index 320b86d..671efcf 100644 --- a/src/main/java/com/example/fercoganbackend/entity/Usuario.java +++ b/src/main/java/com/example/fercoganbackend/entity/Usuario.java @@ -19,11 +19,23 @@ public class Usuario { @Enumerated(EnumType.STRING) private Set roles; // aquí consumes el enum + @ManyToOne + @JoinColumn(name = "RolId") + private Roles rol; + private Boolean visible = true; // getters y setters + public Roles getRol() { + return rol; + } + + public void setRol(Roles rol) { + this.rol = rol; + } + public Boolean getVisible() { return visible; } diff --git a/src/main/java/com/example/fercoganbackend/repository/RolesRepository.java b/src/main/java/com/example/fercoganbackend/repository/RolesRepository.java new file mode 100644 index 0000000..2044c4e --- /dev/null +++ b/src/main/java/com/example/fercoganbackend/repository/RolesRepository.java @@ -0,0 +1,7 @@ +package com.example.fercoganbackend.repository; + +import com.example.fercoganbackend.entity.Roles; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface RolesRepository extends JpaRepository { +} diff --git a/src/main/java/com/example/fercoganbackend/service/UsuarioService.java b/src/main/java/com/example/fercoganbackend/service/UsuarioService.java index 5c309c6..a978e40 100644 --- a/src/main/java/com/example/fercoganbackend/service/UsuarioService.java +++ b/src/main/java/com/example/fercoganbackend/service/UsuarioService.java @@ -1,7 +1,9 @@ package com.example.fercoganbackend.service; import com.example.fercoganbackend.entity.Rol; +import com.example.fercoganbackend.entity.Roles; import com.example.fercoganbackend.entity.Usuario; import com.example.fercoganbackend.otros.ConfirmadoTF; +import com.example.fercoganbackend.repository.RolesRepository; import com.example.fercoganbackend.repository.UsuarioRepository; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; @@ -12,20 +14,25 @@ import java.util.Set; public class UsuarioService { private final UsuarioRepository repo; private final PasswordEncoder encoder; + private final RolesRepository rolesRepository; public List getAll(){ return repo.findAll(); } - public UsuarioService(UsuarioRepository repo, PasswordEncoder encoder) { + public UsuarioService(UsuarioRepository repo, PasswordEncoder encoder, RolesRepository rolesRepository) { this.repo = repo; this.encoder = encoder; + this.rolesRepository = rolesRepository; } - public Usuario registrarUsuario(String username, String password, Set roles) { + public Usuario registrarUsuario(String username, String password, Set roles, Long rolId) { + Roles rol = rolesRepository.findById(rolId) + .orElseThrow(() -> new RuntimeException("Rol no encontrado")); Usuario u = new Usuario(); u.setUsername(username); u.setPassword(encoder.encode(password)); u.setRoles(roles); + u.setRol(rol); u.setAprobado(false); // no aprobado hasta aceptación return repo.save(u); } @@ -82,6 +89,12 @@ public class UsuarioService { return usuario.getId(); } + public Long obtenerIdRolPorUsername(String username) { + return repo.findByUsername(username) + .map(usuario -> usuario.getRol().getId()) // Navega: Usuario -> Rol -> Id + .orElse(null); // O podrías lanzar una excepción si el usuario no existe + } + }