コード例 #1
0
        /// <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);
                        }
                    }
                }
            }
        }
コード例 #2
0
        /// <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);
                    }
                }
            }
        }
コード例 #3
0
        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);
                }
            }
        }