//Borra los historicos mas antiguos de los usuarios para que siempre haya un limite de creacion //para cada uno de ellos public void actualizarHistoricos(string idUsuario, string passActual) { decimal _idUsuario = Convert.ToDecimal(idUsuario); var query = (from a in dbo.UsuariosHistorico where a.idUsuario == _idUsuario select a).OrderBy(x => x.FechaCaducidad).FirstOrDefault(); List <UsuariosHistorico> lista = (from b in dbo.UsuariosHistorico where b.idHistorico == query.idHistorico select b).ToList(); //Borrar registro nuevo if (lista.Count > 0) { foreach (UsuariosHistorico data in lista) { dbo.UsuariosHistorico.DeleteObject(data); dbo.SaveChanges(); } } int mesesCaducidad = ConsultarMesesCaducidad(); //Crear uno nuevo reemplazando el antiguo UsuariosHistorico dataHistorico = new UsuariosHistorico() { idUsuario = Convert.ToDecimal(idUsuario), PassCodeUsuario = passActual, FechaCaducidad = DateTime.Now.AddMonths(mesesCaducidad), Activo = true }; dbo.AddToUsuariosHistorico(dataHistorico); dbo.SaveChanges(); }
/// <summary> /// Cambia la contraña de ususario /// </summary> public ActionResult CambioContrasena(string passActual, string confPass) { try { ControlUsuarios val = new ControlUsuarios(); Usuarios user = new Usuarios(); //<<JFPancho;6-abril-2017; valida si el usuario logueado tiene accceso al modulo int?idRol = ((Usuarios)Session["USUARIO_LOGUEADO"]).RolId; var result = gd.spValidaAccesoModulo(idRol, "/Usuarios/CambioContrasena").FirstOrDefault(); if (result == 0) { Response.Redirect("../Home/Index"); } //JFPancho >> user.IdUsuario = ((Usuarios)Session["USUARIO_LOGUEADO"]).IdUsuario; //Validar que la contraseña nueva ingresada no exista en los historicos. string passEncript = this.encryptar(confPass); bool resultadoValidacion = val.ConsultarHistoricos(user.IdUsuario.ToString(), passEncript); if (resultadoValidacion) { return(View("ErrorContrasena")); //throw new Exception("La nueva contraseña ingresada fue usada anteriormente."); } string password = gd.Usuarios.Where(x => x.IdUsuario == user.IdUsuario).Select(z => z.PassCodeUsuario).First().ToString(); if (this.encryptar(passActual).Equals(password)) { bool totalHistoricos = val.ConsultarTotalHistoricos(user.IdUsuario.ToString()); if (totalHistoricos) { //Cuando pase de 4 borra el registro mas antiguo y crea uno nuevo val.actualizarHistoricos(user.IdUsuario.ToString(), passEncript); } else { int mesesCaducidad = val.ConsultarMesesCaducidad(); //Cuando el total de registros no supera 4 se debe insertar uno nuevo UsuariosHistorico dataHistorico = new UsuariosHistorico() { idUsuario = Convert.ToDecimal(user.IdUsuario.ToString()), PassCodeUsuario = this.encryptar(confPass), FechaCaducidad = DateTime.Now.AddMonths(mesesCaducidad), Activo = true }; dbo.AddToUsuariosHistorico(dataHistorico); dbo.SaveChanges(); } gd.sp_CambioPassword(int.Parse(user.IdUsuario.ToString()), confPass); } else { return(View("contrasenaerror")); } return(View()); } catch (Exception e) { LogRepository.registro("Error en UsuariosController metodo CambioContrasena " + e.Message + " stack trace " + e.StackTrace); throw; } }