para no tener el lio de que un user malintencionado meta en el json admin=true ¿cómo seria el DTO?
para no tener el lio de que un user malintencionado meta en el json admin=true ¿cómo seria el DTO?
¡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!