public IHttpActionResult PostRol(Rol rol) { if (!ModelState.IsValid) { return BadRequest(ModelState); } //creo una lista de permisos List<Permiso> aux = new List<Permiso>(); //recorrro la lista de permisos en el objeto rol foreach (Permiso temp in rol.permisos){ //agreglo los permmisos a la lista que cree antes aux.Add(db.Permisos.Find(temp.PermisoID)); } //igualo los permisos del a la list que cree con el fin de que no me duplique permisos rol.permisos = aux; db.Roles.Add(rol); db.SaveChanges(); return CreatedAtRoute("DefaultApi", new { id = rol.RolId }, rol); }
public IHttpActionResult PutRol(int id, Rol rol) { if (!ModelState.IsValid) { return BadRequest(ModelState); } if (id != rol.RolId) { return BadRequest(); } //busco el rol que existe en la base de datos var objRol = db.Roles.Find(id); //seteo los datos del rol en la bd por los que recibo por parametro db.Entry(objRol).CurrentValues.SetValues(rol); //creo una lista de permiso y la igualo a los permisos que tiene el objeto //rol List<Permiso> aux = objRol.permisos.ToList(); //recorro la lista de permisos que tiene el rol foreach (var dbPermisos in aux) //pregunto si los permisos de rol que recibo son menos que los que existen if (!rol.permisos.Any(p => p.PermisoID == dbPermisos.PermisoID)) //entonces elimino del rol los que no esten en la nueva lista objRol.permisos.Remove(dbPermisos); //recorro la nueva lista que recibo por parametro foreach (var newPermisos in rol.permisos) { //igualo la variable temp al permiso var temp = objRol.permisos.SingleOrDefault(s => s.PermisoID == newPermisos.PermisoID); //si tem es nullo entonces agregro el permiso if (temp == null) objRol.permisos.Add(db.Permisos.Find(newPermisos.PermisoID)); } try { db.SaveChanges(); } catch (DbUpdateConcurrencyException) { if (!RolExists(id)) { return NotFound(); } else { throw; } } return StatusCode(HttpStatusCode.NoContent); }