/// <summary>
        /// Permite consultar los Permisos de una Opción especifica de una Aplicación,
        /// devuelve un valor Booleano (True si tiene acceso y False si no lo tiene)
        /// </summary>
        /// <param name="tipo">Tipo de Permiso (si se escoge Otro se usará el parametro OtroPermiso)</param>
        /// <param name="NombreModulo">Literal. Opción del Sistema</param>
        /// <param name="OtroPermiso">Literal. Opcion utilizada cuando en Tipo se establece Otro</param>
        /// <remarks>Erick Orlando © 2008</remarks>
        public static bool ConsultarPermisos(TipoAccion tipo, string NombreModulo, string OtroPermiso = "")
        {
            //Recuperamos el Usuario Autenticado
            if (ApplicationContext.LocalContext["Principal"] != null)
            {
                ApplicationContext.User = ApplicationContext.LocalContext["Principal"] as IPrincipal;
            }
            //Consultamos los Permisos Efectivos
            var coleccion = PermisosEfectivosInfoList.GetPermisosEfectivosInfoList();
            var opcion    = OtroPermiso;

            switch (tipo)
            {
            case TipoAccion.PuedeAgregar:
                opcion = "Nuevo";
                break;

            case TipoAccion.PuedeActualizar:
                opcion = "Editar";
                break;

            case TipoAccion.PuedeEliminar:
                opcion = "Eliminar";
                break;

            case TipoAccion.PuedeLeer:
                opcion = "Buscar";
                break;

            default:
                if (String.IsNullOrEmpty(OtroPermiso))
                {
                    throw new ArgumentNullException("No se ha especificado un valor para el parámetro OtroPermiso");
                }
                break;
            }

            var permisos = coleccion.Where(p => p.Opcion.Equals(NombreModulo) && p.Conceder.Equals(true) && p.Opcion.Equals(opcion));

            foreach (var item in permisos)
            {
                if (ApplicationContext.User.IsInRole(item.Rol))
                {
                    return(true);
                }
            }

            //Si termina el recorrido de todos los Roles y ninguno tiene permisos
            return(false);            //Devolvermos Falso.
        }
 /// <summary>
 /// Limpia por Completo la caché de Permisos
 /// NOTA: No es igual que cerrar sesión
 /// </summary>
 /// <remarks>Erick Orlando © 2010</remarks>
 public static void LimpiarCache()
 {
     PermisosEfectivosInfoList.InvalidateCache();
 }