Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Y como seria el Dto?

para no tener el lio de que un user malintencionado meta en el json admin=true ¿cómo seria el DTO?

1 respuesta

¡Hola Edwin, espero que estés bien!

Entiendo tu preocupación sobre cómo manejar adecuadamente los datos que llegan a tu API para evitar que un usuario malintencionado modifique atributos sensibles como admin. Para abordar este problema, puedes usar el patrón DTO (Data Transfer Object).

El DTO actúa como una capa intermedia entre la solicitud entrante y tu entidad de negocio. Al usar un DTO, defines explícitamente qué campos son permitidos en la solicitud, y puedes omitir aquellos que no deben ser manipulados directamente por el usuario.

Por ejemplo, podrías definir un DTO para el registro de usuarios de la siguiente manera:

public class UsuarioDTO {
    private String nombre;
    private String email;

    // Getters y setters
}

En este DTO, no incluimos el campo admin, lo que significa que cualquier intento de establecer este valor a través de la solicitud será ignorado. Luego, en tu controlador, puedes mapear este DTO a tu entidad Usuario antes de guardarlo en la base de datos:

@PostMapping
@Transactional
public void registrar(@RequestBody @Valid UsuarioDTO usuarioDTO) {
    Usuario usuario = new Usuario();
    usuario.setNombre(usuarioDTO.getNombre());
    usuario.setEmail(usuarioDTO.getEmail());
    // El campo admin se mantiene con su valor por defecto (false)
    repository.save(usuario);
}

De esta manera, te aseguras de que solo los campos permitidos sean procesados, y los valores por defecto o controlados por la lógica de negocio se mantengan intactos.

Espero haber ayudado y buenos estudios!