// GET: Roles/Edit/5 public ActionResult Edit(/*String id*/) { var modelo = new permiso2Viewmodel(); modelo.Admin = db.AspNetRoles.Find("1"); //consigue los roles del administrador modelo.Desa = db.AspNetRoles.Find("2"); //consigue los roles del desarrollador modelo.Usuario = db.AspNetRoles.Find("3"); //consigue los roles del usuario modelo.Roles = db.AspNetRoles.ToList(); //lista de TODOS los roles, para la vista modelo.Permisos = db.PERMISOS.ToList(); //lista de permisos, para la vista var fg = new AspNetUsers(); //instancia AspNetUser para usuario actual var listauser = db.AspNetUsers.ToArray(); for (int i = 0; i < listauser.Length; i++) //de todos los AspNetUser del sistema, encuentra el que tenga el email activo actualmente { if (listauser[i].Email == User.Identity.Name) { fg = listauser[i]; //obtiene el AspNetUser actual } } AspNetRoles role = fg.AspNetRoles.First(); //consigue el rol del usuario var per = role.PERMISOS; //copia los permisos que tiene asignado foreach (PERMISOS p in role.PERMISOS) //los copia a un HashSet<string> { modelo.verificaPermisos.Add(p.ID); } return(View(modelo)); }
public ActionResult Edit(FormCollection resultado) { if (resultado.Count < db.AspNetRoles.Count() + 1)//verifica que todos los roles tienen al menos un permiso asignado { TempData["Permisos"] = "Roles"; return(this.Edit()); } permisosViewModel Administrador = new permisosViewModel(); //crea un administrador permisosViewModel Desarrollador = new permisosViewModel(); //crea un desarrollador permisosViewModel Usuario = new permisosViewModel(); //crea un usuario List <string> permisosAdmin = new List <string>(); //lista de permisos de administrador List <string> permisosDesarrollador = new List <string>(); //lista de permisos de desarrollador List <string> permisosUsuario = new List <string>(); //lista de permisos de usuario var listaAd = resultado["Administrador"]; //checkbox marcados para administrador var listaDe = resultado["Desarrollador"]; //checkbox marcados para desarrollador var listaUs = resultado["Usuario"]; //checkbox marcados para usuario var lista2 = new string[4]; permiso2Viewmodel prueba = new permiso2Viewmodel(); prueba.Permisos = db.PERMISOS.ToList(); var lista = listaAd.Split(','); if (lista.Count() < prueba.Permisos.Count) //verifica que el administrador tiene todos los permisos { TempData["Permisos"] = "Administrador"; return(this.Edit()); } for (int i = 0; i < lista.Length; i++) //obtiene los checkbox de los permisos marcados para Administrador (Todos) { permisosAdmin.Add(lista[i]); } lista = listaDe.Split(','); if (lista.Contains("05") || lista.Contains("04")) //verifica que el rol no pueda modificar/eliminar usuarios si no los puede consultar { if (!lista.Contains("03")) { TempData["Permisos"] = "Permisos"; return(this.Edit()); } } if (lista.Contains("09") || lista.Contains("08")) //verifica que el rol no pueda modificar/eliminar usuarios si no los puede consultar { if (!lista.Contains("07")) { TempData["Permisos"] = "Permisos"; return(this.Edit()); } } if (lista.Contains("13") || lista.Contains("12")) //verifica que el rol no pueda modificar/eliminar usuarios si no los puede consultar { if (!lista.Contains("11")) { TempData["Permisos"] = "Permisos"; return(this.Edit()); } } if (lista.Contains("17") || lista.Contains("16")) //verifica que el rol no pueda modificar/eliminar usuarios si no los puede consultar { if (!lista.Contains("15")) { TempData["Permisos"] = "Permisos"; return(this.Edit()); } } for (int i = 0; i < lista.Length; i++) //obtiene los checkbox de los permisos marcados para Desarrollador { permisosDesarrollador.Add(lista[i]); } lista = listaUs.Split(','); if (lista.Contains("05") || lista.Contains("04")) //verifica que el rol no pueda modificar/eliminar usuarios si no los puede consultar { if (!lista.Contains("03")) { TempData["Permisos"] = "Permisos"; return(this.Edit()); } } if (lista.Contains("09") || lista.Contains("08")) //verifica que el rol no pueda modificar/eliminar usuarios si no los puede consultar { if (!lista.Contains("07")) { TempData["Permisos"] = "Permisos"; return(this.Edit()); } } if (lista.Contains("13") || lista.Contains("12")) //verifica que el rol no pueda modificar/eliminar usuarios si no los puede consultar { if (!lista.Contains("11")) { TempData["Permisos"] = "Permisos"; return(this.Edit()); } } if (lista.Contains("17") || lista.Contains("16")) //verifica que el rol no pueda modificar/eliminar usuarios si no los puede consultar { if (!lista.Contains("15")) { TempData["Permisos"] = "Permisos"; return(this.Edit()); } } for (int i = 0; i < lista.Length; i++) //obtiene los checkbox de los permisos marcados para Usuario { permisosUsuario.Add(lista[i]); } if (Administrador == null) //verifica que el administrador fue instanciado { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } Administrador.permisosAsignados = permisosAdmin; //asigna los nuevos permisos al administrador if (Desarrollador == null) //verifica que el desarrollador fue instanciado { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } Desarrollador.permisosAsignados = permisosDesarrollador; //asigna nuevos permisos al desarrollador if (Usuario == null) //verifica que el usuario fue instanciado { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } Usuario.permisosAsignados = permisosUsuario; //asigna nuevos permisos al usuario TempData["Error"] = "error"; try { //intenta actualizar la base if (ModelState.IsValid) //verifica que el modelo es válido { var adminActualiza = db.AspNetRoles //permisos asignados al Administrador (encuentra por Id = "1") .Include(i => i.PERMISOS).First(i => i.Id == "1"); if (TryUpdateModel(adminActualiza, "AspNetRoles", new string[] { "Name" })) { var adminNuevos = db.PERMISOS.Where( //los nuevos permisos asignados al administrador m => Administrador.permisosAsignados.Contains(m.ID)).ToList(); var adminActualizado = new HashSet <string>(Administrador.permisosAsignados); //Set de los ID de los permisos asignados (Administrador) foreach (PERMISOS permiso in db.PERMISOS) //para todos los permisos del sistema { if (!adminActualizado.Contains(permiso.ID)) //si el permisos no está en los nuevos permisos asignados { adminActualiza.PERMISOS.Remove(permiso); //se elimina } else { //si el permiso está entre los nuevos permisos adminActualiza.PERMISOS.Add(permiso); //se agrega al sistema } } db.Entry(adminActualiza).State = System.Data.Entity.EntityState.Modified; //actualiza la base de datos db.SaveChanges(); //guarda los cambios } var desaActualiza = db.AspNetRoles //permisos asignados al Desarrollador (encuentra por Id = "2") .Include(i => i.PERMISOS).First(i => i.Id == "2"); if (TryUpdateModel(desaActualiza, "AspNetRoles", new string[] { "Name" })) { var desaNuevos = db.PERMISOS.Where( //los nuevos permisos asignados al desarrollador m => Desarrollador.permisosAsignados.Contains(m.ID)).ToList(); var desaActualizado = new HashSet <string>(Desarrollador.permisosAsignados); //Set de los ID de los permisos asignados (Desarrollador) foreach (PERMISOS permiso in db.PERMISOS) //para todos los permisos del sistema { if (!desaActualizado.Contains(permiso.ID)) //si el permisos no está en los nuevos permisos asignados { desaActualiza.PERMISOS.Remove(permiso); //se elimina } else { //si el permiso está entre los nuevos permisos desaActualiza.PERMISOS.Add(permiso); //se agrega al sistema } } db.Entry(desaActualiza).State = System.Data.Entity.EntityState.Modified; //actualiza la base de datos db.SaveChanges(); //guarda los cambios } var usuActualiza = db.AspNetRoles //permisos asignados al Usuario (encuentra por Id = "3") .Include(i => i.PERMISOS).First(i => i.Id == "3"); if (TryUpdateModel(usuActualiza, "AspNetRoles", new string[] { "Name" })) { var usuNuevos = db.PERMISOS.Where( //los nuevos permisos asignados al desarrollador m => Usuario.permisosAsignados.Contains(m.ID)).ToList(); var usuActualizado = new HashSet <string>(Usuario.permisosAsignados); //Set de los ID de los permisos asignados (Usuario) foreach (PERMISOS permiso in db.PERMISOS) //para todos los permisos del sistema { if (!usuActualizado.Contains(permiso.ID)) //si el permisos no está en los nuevos permisos asignados { usuActualiza.PERMISOS.Remove(permiso); //se elimina } else { //si el permiso está entre los nuevos permisos usuActualiza.PERMISOS.Add(permiso); //se agrega al sistema } } db.Entry(usuActualiza).State = System.Data.Entity.EntityState.Modified; //actualiza la base de datos db.SaveChanges(); //guarda los cambios } TempData["Permisos"] = "Exito"; return(RedirectToAction("Index")); } } catch { //si falla, retorna a la misma pantalla TempData["Permisos"] = "Error"; return(this.Edit()); } TempData["Permisos"] = "Error"; return(RedirectToAction("Index")); //cuando es exitoso, es redirigido a una vista para ver los permisos de cada rol }