public object Get(string token, int paginaID) { PerfilJson perfil = new PerfilJson(); string payload = ""; string newToken = ""; bool validToken = ManageTokens.Instance.ValidateToken(token, out payload, out newToken); JavaScriptSerializer serializer = new JavaScriptSerializer(); if (validToken) { dynamic obj = serializer.DeserializeObject(payload); int perfilId = Convert.ToInt32(obj["PerfilID"].ToString()); Sam3_Usuario usuario = serializer.Deserialize <Sam3_Usuario>(payload); perfil = PerfilBd.Instance.ObtenerPerfilJsonPorID(perfilId, paginaID, usuario); perfil.token = newToken; return(perfil); } else { TransactionalInformation infoError = new TransactionalInformation(); infoError.ReturnCode = 401; infoError.ReturnStatus = false; infoError.IsAuthenicated = false; infoError.ReturnMessage.Add(payload); return(infoError); } }
public PerfilJson ObtenerPerfilJsonPorID(int perfilID, int paginaID, Sam3_Usuario usuario) { PerfilJson perfil; using (SamContext ctx = new SamContext()) { //Obtenermos el Id de la pagina //int paginaID = ctx.Sam3_Pagina.Where(x => x.Accion == pageName).Select(x => x.PaginaID).SingleOrDefault(); //Obtenemos los datos de la relacion entidad perfil Sam3_Rel_Perfil_Entidad_Pagina perfil_entidad = ctx.Sam3_Rel_Perfil_Entidad_Pagina .Where(x => x.PerfilID == perfilID && x.EntidadID == (int)Enumeraciones.Entidades.Layout && x.PaginaID == (int)Enumeraciones.Paginas.Layout) .FirstOrDefault(); //instanciamos el nuevo objeto de retorno de Json perfil = new PerfilJson(); //asignaom valores a las propiedades de Layout perfil.layout.create = perfil_entidad.PermisoCreacion; perfil.layout.destroy = perfil_entidad.PermisoEliminacion; perfil.layout.detail = perfil_entidad.PermisoDetalle; perfil.layout.list = perfil_entidad.PermisoListado; perfil.layout.createIncidence = perfil_entidad.PermisoCapturaIncidencia; perfil.layout.solutionincidence = perfil_entidad.PermisoSolucionIncidencia; //obtenemos la lista de propiedades por perfil y entidad List <Properties> lstProperties = (from p in ctx.Sam3_Rel_Perfil_Propiedad_Pagina join pr in ctx.Sam3_Propiedad on p.PropiedadID equals pr.PropiedadID where p.PerfilID == perfilID && pr.EntidadID == perfil_entidad.EntidadID && pr.Activo.Value == true && p.Activo select new Properties { propertyName = pr.Nombre, visible = p.PermisoLectura, editable = p.PermisoEdicion, required = p.Requerido }).ToList(); //agregamos la lista de propiedades del layout perfil.layout.properties.AddRange(lstProperties); //creamos un nuevo objeto de sideMenu sideMenu objsidemenu = new sideMenu(); objsidemenu.editable = false; objsidemenu.visible = true; objsidemenu.type = "sidemenu"; //traer la lista de elementos de sidemenu List <SideMenuElement> lstElements = (from rsm in ctx.Sam3_Rel_Perfil_MenuGeneral join mg in ctx.Sam3_MenuGeneral on rsm.MenuGeneralID equals mg.MenuID where rsm.PerfilID == perfilID && mg.Activo && rsm.Activo select new SideMenuElement { elemetId = mg.MenuID, idPadre = mg.IDPadre, liga = mg.Liga, texto = mg.Texto, icono = mg.Icono, nivel = mg.Nivel.Value, acomodo = mg.Acomodo.Value }).AsParallel().OrderBy(x => x.idPadre).ThenBy(x => x.acomodo).ToList(); objsidemenu.elements = lstElements; //crear objeto de menu contextual contextMenu ctxmenu = new contextMenu(); ctxmenu.visible = true; ctxmenu.editable = false; ctxmenu.type = "contextmenu"; //traer la lista de elementos del menu contextual List <ContextMenuElement> lstCtxMenuElements = (from r in ctx.Sam3_Rel_Perfil_MenuContextual join mc in ctx.Sam3_MenuContextual on r.MenuContextualID equals mc.MenuID where r.PerfilID == perfilID && r.Activo && mc.Activo select new ContextMenuElement { liga = mc.Liga, texto = mc.Texto }).AsParallel().OrderBy(x => x.texto).ToList(); //agregamos los elementos ctxmenu.elements = lstCtxMenuElements; //creamos el arreglo quickLinks quicklinks quickLinks = new quicklinks(); quickLinks.editable = false; quickLinks.visible = true; quickLinks.type = "quicklinks"; quickLinks.elements.AddRange((from relup in ctx.Sam3_Rel_Usuario_Preferencia join pref in ctx.Sam3_Preferencia on relup.PreferenciaID equals pref.PreferenciaId where relup.Activo && pref.Activo && relup.UsuarioID == usuario.UsuarioID select new QuickLinksElement { liga = relup.ValorPreferencia, texto = pref.Nombre }).AsParallel().OrderBy(x => x.texto).ToList()); //agregamos los elementos de menu perfil.layout.navigation.Add(objsidemenu); perfil.layout.navigation.Add(ctxmenu); perfil.layout.navigation.Add(quickLinks); //obtnemos los datos para la entidad login List <Sam3_Rel_Perfil_Entidad_Pagina> lstperfilesEntides = ctx.Sam3_Rel_Perfil_Entidad_Pagina .Where(x => x.PerfilID == perfilID && x.PaginaID == paginaID && x.Activo).ToList(); //creamos la lista de entidades List <Entidad> lstEntidades = (from lst in lstperfilesEntides select new Entidad { entityName = lst.Sam3_Entidad.Nombre, create = lst.PermisoCreacion, destroy = lst.PermisoEliminacion, detail = lst.PermisoDetalle, list = lst.PermisoListado, createIncidence = lst.PermisoCapturaIncidencia, solutionincidence = lst.PermisoSolucionIncidencia }).ToList(); lstEntidades = lstEntidades.GroupBy(x => x.entityName).Select(x => x.First()).ToList(); //creamos la lista de propiedades por cada entidad foreach (Entidad e in lstEntidades) { List <Properties> lstProperty = (from r in ctx.Sam3_Rel_Perfil_Propiedad_Pagina join p in ctx.Sam3_Propiedad on r.PropiedadID equals p.PropiedadID join en in ctx.Sam3_Entidad on p.EntidadID equals en.EntidadID where r.Activo && p.Activo.Value == true && en.Activo && r.PerfilID == perfilID && r.PaginaID == paginaID && en.Nombre == e.entityName select new Properties { propertyName = p.Nombre, editable = r.PermisoEdicion, visible = r.PermisoLectura, required = r.Requerido }).ToList(); lstProperty = lstProperty.GroupBy(x => x.propertyName).Select(x => x.First()).ToList(); e.properties = lstProperty; } //agregar las entidades al perfil perfil.entidades = lstEntidades; } #if DEBUG JavaScriptSerializer serializer = new JavaScriptSerializer(); string json = serializer.Serialize(perfil); #endif return(perfil); }