/// <summary> /// Aplica la seguridad de manera recursiva sobre un control, para el nombre de control negado que se ha solicitado /// </summary> /// <param name="nombre_control_negado">Nombre del control a proteger</param> /// <param name="control">Control a evaluar</param> /// <param name="nivel_seguridad_principal">Indica que tipo de elemento desencadenó la petición inicial de seguridad</param> private static void aplicaSeguridadControl(string nombre_control_negado, System.Web.UI.Control control, TipoRecurso nivel_seguridad_principal) { //Declarando bandera para señalar si es valida la inspección del control actual en base a su tipo de recurso bool aplicar_seguridad = true; switch (nivel_seguridad_principal) { case TipoRecurso.FormaWeb: case TipoRecurso.ControlUsuarioWeb: //Si es un control de usuario if (control is System.Web.UI.UserControl) { aplicar_seguridad = false; } break; case TipoRecurso.PaginaMaestra: //Si es un control de usuario o una forma web if (control is System.Web.UI.UserControl || (control is ContentPlaceHolder)) { aplicar_seguridad = false; } break; } //Si se aplicará seguridad if (aplicar_seguridad) { //Si el control tiene el mismo nombre que el elemento a bloquear if (nombre_control_negado == control.ID) { try { //Ocultando elemento control.Visible = false; } catch (NotImplementedException) { } } //De lo contrario else { //Si el control tiene subelementos if (control.HasControls()) { //Para cada elemento foreach (System.Web.UI.Control c in control.Controls) { aplicaSeguridadControl(nombre_control_negado, c, nivel_seguridad_principal); } } } } }
/// <summary> /// Finds all descendants of a certain type of the specified control. /// </summary> /// <typeparam name="TControl">The type of descendant controls to look for.</typeparam> /// <param name="parent">The parent control where to look into.</param> /// <returns>All corresponding descendants</returns> /// <exception cref="ArgumentNullException">control</exception> /// <exception cref="System.ArgumentNullException">control</exception> public static IEnumerable <TControl> FindDescendants <TControl>(this System.Web.UI.Control parent) where TControl : System.Web.UI.Control { if (parent == null) { throw new ArgumentNullException("control"); } if (parent.HasControls()) { foreach (System.Web.UI.Control childControl in parent.Controls) { var candidate = childControl as TControl; if (candidate != null) { yield return(candidate); } foreach (var nextLevel in FindDescendants <TControl>(childControl)) { yield return(nextLevel); } } } }
private void ExtractDeviceFilterSchemas(System.Web.UI.Control control) { if (null == control) { return; } MobileControl mobileControl = control as MobileControl; if (null != mobileControl) { DeviceSpecific deviceSpecific; DeviceSpecificChoiceCollection choices; if (mobileControl is StyleSheet) { StyleSheet styleSheet = (StyleSheet)mobileControl; ICollection styleKeys = styleSheet.Styles; foreach (String key in styleKeys) { Style style = styleSheet[key]; deviceSpecific = style.DeviceSpecific; if (null != deviceSpecific && _ds != deviceSpecific) { choices = deviceSpecific.Choices; foreach (DeviceSpecificChoice choice in choices) { if (choice.Xmlns != null && choice.Xmlns.Length > 0 && !_strCollSchemas.Contains(choice.Xmlns)) { _strCollSchemas.Add(choice.Xmlns); } } } } } else { deviceSpecific = mobileControl.DeviceSpecific; if (null != deviceSpecific && _ds != deviceSpecific) { choices = deviceSpecific.Choices; foreach (DeviceSpecificChoice choice in choices) { if (choice.Xmlns != null && choice.Xmlns.Length > 0 && !_strCollSchemas.Contains(choice.Xmlns)) { _strCollSchemas.Add(choice.Xmlns); } } } } } if (control.HasControls()) { foreach (System.Web.UI.Control child in control.Controls) { ExtractDeviceFilterSchemas(child); } } }