/// <summary> /// Crear un nuevo usuario /// </summary> /// <param name="Usuario">Objeto a crear, el atributo UsuarioId lo genera la aplicación y es devuelto en el objeto incluido en la respuesta.</param> /// <param name="tk"> Tique de autorzación (se debe obtener con la accion Login)</param> /// <returns></returns> public virtual Usuario Post(Usuario usuario, string tk) { using (PortalProContext ctx = new PortalProContext()) { // comprobar el tique if (!CntWebApiSeguridad.CheckTicket(tk, ctx)) { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Se necesita tique de autorización (Usuarios)")); } // comprobar las precondiciones if (usuario == null) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest)); } // controlar la contraseña. if (usuario.Password != null && usuario.Password != "") { // se guarda la contraseña encriptada usuario.Password = CntWebApiSeguridad.GetHashCode(usuario.Password); } int grupoUsuarioId = 0; // Controlamos las propiedades que son en realidad objetos. if (usuario.GrupoUsuario != null) { grupoUsuarioId = usuario.GrupoUsuario.GrupoUsuarioId; usuario.GrupoUsuario = null; } // dar de alta el objeto en la base de datos y devolverlo en el mensaje ctx.Add(usuario); if (grupoUsuarioId != 0) { usuario.GrupoUsuario = (from g in ctx.GrupoUsuarios where g.GrupoUsuarioId == grupoUsuarioId select g).FirstOrDefault<GrupoUsuario>(); } ctx.SaveChanges(); return ctx.CreateDetachedCopy<Usuario>(usuario, x => x.GrupoUsuario); } }
/// <summary> /// Modificar un usuario. En el cuerpo del mensaje se envía en el formato adecuado el objeto con los datos modificados /// </summary> /// <param name="id"> Identificador único del grupo </param> /// <param name="usuario">Grupo de usuario con los valores que se desean en sus atributos</param> /// <param name="tk"> Tique de autorización (Ver 'Login')</param> /// <returns></returns> public virtual Usuario Put(int id, Usuario usuario, string tk) { using (PortalProContext ctx = new PortalProContext()) { // comprobar el tique if (!CntWebApiSeguridad.CheckTicket(tk, ctx)) { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Se necesita tique de autorización (Usuarios)")); } // comprobar los formatos if (usuario == null || id != usuario.UsuarioId) { throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest)); } // primero buscamos si un usuario con ese id existe Usuario usu = (from u in ctx.Usuarios where u.UsuarioId == id select u).FirstOrDefault<Usuario>(); // existe? if (usu == null) { throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.NotFound, "No hay un usuario con el id proporcionado (Usuarios)")); } // controlar la contraseña. if (usuario.Password != null && usuario.Password != "" && usuario.Password != usu.Password) { // se guarda la contraseña encriptada usuario.Password = CntWebApiSeguridad.GetHashCode(usuario.Password); } int grupoUsuarioId = 0; // Controlamos las propiedades que son en realidad objetos. if (usuario.GrupoUsuario != null) { grupoUsuarioId = usuario.GrupoUsuario.GrupoUsuarioId; usuario.GrupoUsuario = null; } // modificar el objeto ctx.AttachCopy<Usuario>(usuario); // volvemos a leer el objecto para que lo maneje este contexto. usuario = (from u in ctx.Usuarios where u.UsuarioId == id select u).FirstOrDefault<Usuario>(); if (grupoUsuarioId != 0) { usuario.GrupoUsuario = (from g in ctx.GrupoUsuarios where g.GrupoUsuarioId == grupoUsuarioId select g).FirstOrDefault<GrupoUsuario>(); } ctx.SaveChanges(); return ctx.CreateDetachedCopy<Usuario>(usuario, x => x.GrupoUsuario); } }