private static void AgregarOpcionesAnidadas(ResponseOpcionUI respuestaPermiso, IEnumerable <ErickOrlando.Seguridad.Negocio.Editables.Permiso> lista) { //Filtramos los ítems de esta opcion var listaFiltrada = lista.Where(l => l.IdOpcionPadre == respuestaPermiso.IdOpcion); foreach (var permiso in listaFiltrada) { var permisoOpcion = new ResponseOpcionUI { IdOpcion = permiso.IdOpcion, Codigo = permiso.Codigo, NombreControl = permiso.Opcion, ControlPadre = permiso.OpcionPadre, Tipo = permiso.Tipo, Clase = permiso.Clase, Url = permiso.Url, Conceder = true, NumeroOrden = permiso.NroOrden }; AgregarOpcionesAnidadas(permisoOpcion, lista); if (!respuestaPermiso.Opciones.Contains(permisoOpcion)) { respuestaPermiso.Opciones.Add(permisoOpcion); } } }
private static bool tieneHijos(ResponseOpcionUI menu) { //var menus = menu.Opciones.Where(x => x.Clase == "Menu").ToList(); var menus = menu.Opciones; if (menus.Count > 0) { Boolean encontrado = false; foreach (var item in menu.Opciones) { if (tieneHijos(item)) { encontrado = true; break; } } return(encontrado); } else { if (string.IsNullOrEmpty(menu.ControlPadre)) { return(false); } else { return(menu.Clase == "Menu" && !string.IsNullOrEmpty(menu.Url)); } } }
private static IEnumerable <ResponseOpcionUI> ListarOpciones(PerfilUsuarioInfo perfilNegocio, IEnumerable <string> roles) { var response = new List <ResponseOpcionUI>(); //var lis = new List<ResponseOpcionUI>(); //var Opcion = new ResponseOpcionUI(); //int count1 = 0; //int count2 = 0; //List<string> ListString; var RolesPermisos = new List <List <ResponseOpcionUI> >(); foreach (var rolPerfil in perfilNegocio.Roles.Where(r => roles.Contains(r.IdRol))) { var RolPerfil = new List <ResponseOpcionUI>(); var lista = rolPerfil.Permisos.Where(p => p.Conceder.Equals(true)); foreach (var permiso in lista.Where(p => p.Nivel == 1)) { var respuestaPermiso = new ResponseOpcionUI { IdOpcion = permiso.IdOpcion, Codigo = permiso.Codigo, Clase = permiso.Clase, Tipo = permiso.Tipo, Url = permiso.Url, NombreControl = permiso.Opcion, ControlPadre = permiso.OpcionPadre, Conceder = true, NumeroOrden = permiso.NroOrden }; AgregarOpcionesAnidadas(respuestaPermiso, lista); if (!RolPerfil.Contains(respuestaPermiso)) { RolPerfil.Add(respuestaPermiso); } #region "Código Version Anterior" //else //{ // count1 = 0; // foreach (var rsp in response) // { // if (rsp.NombreControl == respuestaPermiso.NombreControl) // { // foreach (var nivel1 in respuestaPermiso.Opciones) // { // if (!rsp.Opciones.Contains(nivel1)) // { // Opcion = nivel1; // InsertNivel(response, Opcion, count1, count2, 1); // } // count2 = 0; // foreach (var nivel2 in respuestaPermiso.Opciones[count1].Opciones) // { // if (!rsp.Opciones[count2].Opciones[count2].Codigo.Contains(nivel2.Codigo)) // { // Opcion = nivel2; // InsertNivel(response, Opcion, count1, count2, 2); // } // } // count2++; // } // } // count1++; // } //} //lis = response; //AgregarOpcionesAnidadas(respuestaPermiso, lista); //if (!response.Contains(respuestaPermiso)) //{ // response.Add(respuestaPermiso); // lis.Add(respuestaPermiso); //} //else //{ // int nivel1 = 0; // foreach (var rsp in response) // { // if (rsp.NombreControl == respuestaPermiso.NombreControl) // { // foreach (var op in rsp.Opciones) // { // if (respuestaPermiso.Opciones.Count > 0) // { // foreach (var RspOp in respuestaPermiso.Opciones) // { // if (!op.IdOpcion.Contains(RspOp.IdOpcion)) // { // var clonado = RspOp.cl; // lis[nivel1].Opciones.Add(clonado); // //rsp.Opciones.Add(respuestaPermiso.Opciones[count]); // break; // } // } // } // } // } // nivel1 += 1; // } //} #endregion } RolesPermisos.Add(RolPerfil); } var ultimorol = RolesPermisos[0]; for (int i = 1; i < RolesPermisos.Count; i++) { ultimorol = MergePermisos(ultimorol, RolesPermisos[i]); } response.AddRange(ultimorol); //ListString = getPermisos(response); return(response); }