Skip to content

Commit 729fd68

Browse files
panel admin. Actualizar y eliminar usuario
1 parent 6e84166 commit 729fd68

8 files changed

Lines changed: 128 additions & 11 deletions

File tree

src/main/java/ar/dev/maxisandoval/webappmaxcotas/config/SecuriyConfiguration.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception{
2727
.requestMatchers("/", "/registro").permitAll()
2828
.requestMatchers(toH2Console()).permitAll()
2929
.requestMatchers(new AntPathRequestMatcher("/gestorRoles")).hasAuthority("ROL_ADMIN")
30+
.requestMatchers(new AntPathRequestMatcher("/actualizarRolUsuario")).hasAuthority("ROL_ADMIN")
3031
.anyRequest().authenticated()
3132
)
3233
.formLogin(httpSecurityFormLoginConfigurer -> httpSecurityFormLoginConfigurer

src/main/java/ar/dev/maxisandoval/webappmaxcotas/controller/AuthController.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,4 @@ public String registrarUsuario(Usuario usuario){
3535
customUserDetailsService.guardarUsuario(usuario);
3636
return "redirect:/login";
3737
}
38-
39-
@GetMapping("/gestorRoles")
40-
public String gestorRoles(Model model) {
41-
model.addAttribute("usuarios", customUserDetailsService.listarUsuariosRegistrados());
42-
return "gestorRoles";
43-
}
44-
}
38+
}

src/main/java/ar/dev/maxisandoval/webappmaxcotas/controller/MascotaViewController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public String listarMascotas(Model model) {
4949
return "mascotas";
5050
}
5151

52-
private void mostrarRolesUsuarioActual (Authentication authentication){
52+
private void mostrarRolesUsuarioActual(Authentication authentication) {
5353
for (GrantedAuthority authority : authentication.getAuthorities()) {
5454
String rol = authority.getAuthority();
5555
log.info("Rol actual: "+rol);
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package ar.dev.maxisandoval.webappmaxcotas.controller;
2+
3+
import ar.dev.maxisandoval.webappmaxcotas.model.Mascota;
4+
import ar.dev.maxisandoval.webappmaxcotas.model.Usuario;
5+
import ar.dev.maxisandoval.webappmaxcotas.service.CustomUserDetailsService;
6+
import lombok.AllArgsConstructor;
7+
import org.springframework.stereotype.Controller;
8+
import org.springframework.ui.Model;
9+
import org.springframework.web.bind.annotation.GetMapping;
10+
import org.springframework.web.bind.annotation.PathVariable;
11+
import org.springframework.web.bind.annotation.PostMapping;
12+
import org.springframework.web.bind.annotation.RequestParam;
13+
14+
@Controller
15+
@AllArgsConstructor
16+
public class PanelAdminController {
17+
18+
private final CustomUserDetailsService customUserDetailsService;
19+
20+
@GetMapping("/gestorRoles")
21+
public String gestorRoles(Model model) {
22+
model.addAttribute("usuarios", customUserDetailsService.listarUsuariosRegistrados());
23+
return "gestorRoles";
24+
}
25+
26+
@GetMapping("/actualizarRolUsuario/{id}")
27+
public String mostrarFormularioActualizarUsuario(@PathVariable Long id, Model model){
28+
Usuario usuario = customUserDetailsService.obtenerUsuarioPorId(id);
29+
model.addAttribute("usuario", usuario);
30+
31+
return "actualizarRolUsuario";
32+
}
33+
34+
@PostMapping("/actualizarRolUsuario/{id}")
35+
public String actualizarRolUsuario(@PathVariable Long id, @RequestParam String rol) {
36+
customUserDetailsService.actualizarRolUsuario(id, rol);
37+
return "redirect:/gestorRoles";
38+
}
39+
40+
@GetMapping("/eliminarUsuario/{id}")
41+
public String eliminarMascota(@PathVariable Long id){
42+
customUserDetailsService.eliminarUsuario(id);
43+
return "redirect:/gestorRoles";
44+
}
45+
}

src/main/java/ar/dev/maxisandoval/webappmaxcotas/service/CustomUserDetailsService.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.springframework.security.crypto.password.PasswordEncoder;
1313
import org.springframework.stereotype.Service;
1414
import java.util.List;
15+
import java.util.Optional;
1516

1617
@Service
1718
@AllArgsConstructor
@@ -39,12 +40,31 @@ public Usuario guardarUsuario(Usuario usuario) {
3940
return usuarioRepository.save(usuario);
4041
}
4142

43+
public Usuario actualizarRolUsuario(Long id, String nuevoRol) {
44+
Usuario usuario = obtenerUsuarioPorId(id);
45+
46+
if (usuario == null) {
47+
throw new UsernameNotFoundException("Usuario no encontrado: "+id);
48+
}
49+
50+
usuario.setRol(nuevoRol);
51+
return usuarioRepository.save(usuario);
52+
}
53+
54+
public void eliminarUsuario(Long id){
55+
usuarioRepository.deleteById(id);
56+
}
57+
4258
public List<Usuario> listarUsuariosRegistrados() {
4359
return usuarioRepository.findAll();
4460
}
4561

62+
public Usuario obtenerUsuarioPorId(Long id) {
63+
return usuarioRepository.findById(id).orElseThrow(() -> new RuntimeException("No se encontró el usuario: "+id));
64+
}
65+
4666
public PasswordEncoder passwordEncoder() {
4767
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
4868
}
4969

50-
}
70+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head th:insert="~{fragments/header}"></head>
4+
<body class="container mt-5">
5+
6+
<h2 class="mb-4">Actualizar Rol Usuario</h2>
7+
8+
<form th:action="@{/actualizarRolUsuario/{id}(id=${usuario.id})}" method="post">
9+
<input type="hidden" name="_method" value="put">
10+
11+
<div class="form-group">
12+
<label for="username">Username:</label>
13+
<input type="text" class="form-control" id="username" name="username" th:value="${usuario.username}" required disabled>
14+
</div>
15+
16+
<div class="form-group">
17+
<label for="rol">Rol:</label>
18+
<select class="form-control" id="rol" name="rol" required>
19+
<option value="ROL_ADMIN" th:selected="${usuario.rol == 'ROL_ADMIN'}">ROL_ADMIN</option>
20+
<option value="ROL_ADMIN" th:selected="${usuario.rol == 'ROL_LECTURA'}">ROL_LECTURA</option>
21+
<option value="ROL_VETERINARIO" th:selected="${usuario.rol == 'ROL_VETERINARIO'}">ROL_VETERINARIO</option>
22+
</select>
23+
</div>
24+
25+
<br>
26+
27+
<button type="submit" class="btn btn-primary">Actualizar Usuario</button>
28+
</form>
29+
30+
<div th:replace="~{fragments/footer}"></div>
31+
</body>
32+
</html>

src/main/resources/templates/gestorRoles.html

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ <h2 class="mb-4">Panel - Gestor Roles (Solo <b>ADMIN</b>)</h2>
2222
<th>Nombre</th>
2323
<th>Apellido</th>
2424
<th>Veterinario</th>
25+
<th sec:authorize="hasAuthority('ROL_ADMIN')">Acciones</th>
2526
</tr>
2627
</thead>
2728
<tbody>
@@ -32,10 +33,34 @@ <h2 class="mb-4">Panel - Gestor Roles (Solo <b>ADMIN</b>)</h2>
3233
<td th:text="${usuario.nombre}"></td>
3334
<td th:text="${usuario.apellido}"></td>
3435
<td th:text="${usuario.veterinario?.nombre}"></td><!--el ? ya que puede llegar nulo-->
36+
37+
<!-- Botones de eliminar y actualizar usuario -->
38+
<td sec:authorize="hasAuthority('ROL_ADMIN')">
39+
<button th:onclick="'eliminarUsuarioConfirmacion(\'' + ${usuario.id} + '\');'" class="btn btn-danger">Eliminar</button>
40+
<a th:href="@{/actualizarRolUsuario/{id}(id=${usuario.id})}" class="btn btn-warning">Actualizar</a>
41+
</td>
3542
</tr>
3643
</tbody>
3744
</table>
3845

46+
<script>
47+
function eliminarUsuarioConfirmacion(id) {
48+
Swal.fire({
49+
title: '¿Desea eliminar el usuario seleccionado?',
50+
icon: 'warning',
51+
showCancelButton: true,
52+
confirmButtonColor: '#d33',
53+
cancelButtonColor: '#3085d6',
54+
confirmButtonText: 'Eliminar',
55+
cancelButtonText: 'Cancelar'
56+
}).then((result) => {
57+
if (result.isConfirmed) {
58+
location.href = '/maxcota/eliminarUsuario/' + id;
59+
}
60+
});
61+
}
62+
</script>
63+
3964
<div th:replace="~{fragments/footer}"></div>
4065
</body>
4166
</html>

src/main/resources/templates/mascotas.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,6 @@ <h2>Lista de Mascotas</h2>
5555
</tbody>
5656
</table>
5757

58-
<div th:replace="~{fragments/footer}"></div>
59-
6058
<script>
6159
function eliminarMascotaConfirmacion(id) {
6260
Swal.fire({
@@ -75,5 +73,7 @@ <h2>Lista de Mascotas</h2>
7573
}
7674
</script>
7775

76+
<div th:replace="~{fragments/footer}"></div>
77+
7878
</body>
7979
</html>

0 commit comments

Comments
 (0)