JASoft.org

Propagación y herencia de permisos: la clase FileSystemAccessRule

Propagación y herencia de permisos: la clase FileSystemAccessRule
La información que ofrece en ocasiones MSDN sobre la plataforma .NET se puede decir, eufemísticamente, que "no es todo lo buena que debiera ser". Un buen ejemplo de ello es la documentación de la clase FileSystemAccessRule y más en concreto lo que se refiere a los indicadores sobre propagación y herencia de permisos en el acceso al sistema de archivos. Consideremos este ejemplo. Necesitas controlar desde tu aplicación el acceso a un carpeta llamada "docs" de forma que te asegures de que el usuario "DOMINIO\Usuario" tendrá acceso de lectura a la carpeta y todas sus subcarpetas (y las hijas de éstas), pero sin embargo no tendrá acceso a ninguno de los archivos contenidos en éstas. Dejemos de lado la utilidad exacta de esto. Lo que quiero es mostrar lo retorcidas que han puesto las opciones correspondientes en la plataforma .NET :-S El código en C# que necesitaríamos incluir es este: 1: DirectorySecurity dirSec = Directory.GetAccessControl(@&quo... [Más]

Trucos de uso y productividad para Windows 8

Trucos de uso y productividad para Windows 8
Llevo unos cuantos días usando la nueva versión beta denominada Consumer Preview de Windows 8. Ya antes había usado la Developer Preview de hace unos meses, pero desde una máquina virtual por lo que no le daba un uso real. ahora la he montado en mi portátil, actualizando desde Windows 7, y la uso en real varias horas al día, por lo que puedo hablar con mucho más conocimiento de causa. Para empezar he de confesar públicamente que la interfaz Metro y la desaparición del botón de inicio me irritan y es algo que no me gusta nada. para un "power user" como yo es una pérdida de productividad en un entorno no táctil, si bien probablemente para los usuarios más comunes pueda ser mejor. Microsoft ha hecho sus estudios concienzudos (muy interesante, por cierto), y seguro que son gente muy lista. Puede que me acabe acostumbrando con los meses y cambie de opinión (sobre todo si uso un tablet con Windows 8), pero hoy por hoy para mi es una pérdida de productividad al trabajar. Y no soy e... [Más]

Pedir una cosa y recibir otra - Parte IV: Llamadas de servidor que recrean la petición completa

Pedir una cosa y recibir otra - Parte IV: Llamadas de servidor que recrean la petición completa
Hasta ahora con Transfer y Execute hemos visto que podemos ejecutar otras páginas del mismo tipo sin necesidad de redirección desde el lado cliente. Sin embargo un efecto secundario que tiene su uso es que, como no se regenera la petición sino que se ejecutan dentro del contexto de la petición actual, no entran en juego los controles de seguridad y otros eventos del pipeline HTTP para la segunda página. Es por ello por lo que en nuestro ejemplo se ha podido mostrar el contenido de la página "P2.aspx" a pesar de que estaba protegida. Existe una variante de estos métodos llamada TransferRequest que permite conseguir una petición completa desde el propio servidor, sin pasar por el cliente como ocurría con Redirect. Este método se utiliza del mismo modo que Transfer pero en este caso la segunda página pasa por todo los estadios de una petición HTTP normal, como si hubiera sido hecha desde el cliente desde... [Más]

Pedir una cosa y recibir otra - Parte III: Ejecutar otras páginas

Pedir una cosa y recibir otra - Parte III: Ejecutar otras páginas
En la entrega anterior de esta serie vimos a fondo cómo funcionaba el método Transfer. Seguimos ahora profundizando en otros métodos relacionados. El método Transfer por debajo lo único que hace es llamar al método Execute de la misma clase HttpUtility: Este método es prácticamente idéntico a Transfer, como vemos en este código, por lo que a todos los efectos podemos sustituir las llamadas a Transfer por llamadas a Execute y no perder funcionalidad. Además, si nos fijamos en el código de Transfer de una figura anterior, llama continuación a Response.End. Esto como ya vimos en la primera parte con Redirect, tiene algunas implicaciones respecto al rendimiento debido a la generación de excepciones ThreadAbortException, por lo que en sitios muy grandes donde cada milésima cuenta puede ser interesante sustituir las llamadas a Transfer por llamadas a Execute con una posterior a CompleteRequest (repasa el primer post para verlo). Si hacemos lo mismo que antes pero llamando a Execute en ... [Más]

Pedir una cosa y recibir otra - Parte II: Transferir la ejecución

Pedir una cosa y recibir otra - Parte II: Transferir la ejecución
En el post anterior de esta serie vimos cómo la forma más sencilla de transferir a un usuario desde una página a otra es mediante el uso de una redirección en el lado cliente, usando Redirect o RedirectPermanent. Sin embargo esto implica dos secuencias de petición-respuesta al servidor y además se visualiza la página final en la barra de direcciones del usuario. Muchas veces (la mayoría) es probable que sea lo que queremos, pero hay otras situaciones en las que no será así y lo que necesitaremos es que la ejecución se cambie en el servidor, de manera inadvertida para el usuario, por ejemplo: Ejecutar código común a varias páginas que hace uso de controles y genera elementos para la interfaz de usuario. En la mayor parte de los casos podríamos usar una biblioteca común o un control de usuario, pero si involucra páginas complejas o, simplemente, si ya tenemos la funcionalidad hecha en un ASPX y no queremos repetir el trabajo, nos vendrá bien poder transferir la ejecución a esta pág... [Más]

Pedir una cosa y recibir otra - Parte I: Redirect y RedirectPermanent

Pedir una cosa y recibir otra - Parte I: Redirect y RedirectPermanent
En ASP.NET existen muchos métodos para conseguir que cuando un usuario solicita una página en el servidor, acabe obteniendo el resultado de ejecutar otra página o recurso diferente. ¿Para qué querríamos hacer algo así? Por múltiples motivos, y en realidad es algo que se usa constantemente: Redirigir a los usuarios a una página nueva Ejecutar una funcionalidad que reside en otra página o recurso Ofrecer al usuario rutas amigables cuando por debajo usamos una estructura de páginas más compleja Hacer que las URLs antiguas de una aplicación sigan funcionando aunque hayamos cambiado la estructura del sitio .... El framework de ASP.NET ofrece muchos métodos diferentes de cambiar el recurso utilizado para responder a una petición, y cada uno tiene sus aplicaciones específicas. Así que ¿Cuál utilizar? Vamos a verlos todos para resolver las dudas y conocer bien sus diferencias y mejores aplicaciones. El ejemplo Para ilustrar en la práctica todos estos métodos he crea... [Más]

Cómo simular otros navegadores para probar desarrollos Web

Cómo simular otros navegadores para probar desarrollos Web
En ocasiones es muy útil poder engañar al servidor web y hacerle creer que te estás conectando con cualquier navegador, aunque en realidad estés usando Internet Explorer o Chrome bajo Windows, por ejemplo. Como sabes, los controles de ASP.NET Web Forms tienen lo que se llama renderizado adaptativo, que consiste en que generan un HTML diferente según el dispositivo que solicite la página, pudiendo así adaptarse a las características de cada navegador de la mejor forma posible. Así puedes ver qué efecto causa sobre el HTML que renderiza tu aplicación si estás usando un navegador muy viejo (Netscape?) o saber si cambia según sea el sistema operativo (puedes decir que estás trabajando desde Linux o Mac aunque estés en Windows), etc.. Un caso muy habitual es, por ejemplo, si estás probando una aplicación móvil y quieres ver qué HTML te devolvería cuando te conectas con un iPhone o un Windows Phone, puedes engañar al servidor fácilmente y hacerte pasar por uno de estos navegadores simpleme... [Más]

Cómo obtener rutas absolutas en ASP.NET

Cómo obtener rutas absolutas en ASP.NET
Hoy un truco rápido. En ASP.NET a veces necesitamos convertir rutas relativas (por ejemplo guardadas en una base de datos) a rutas absolutas para poder referenciar archivos para descarga, imágenes, etc... Estas rutas pueden venir dadas de diversas formas. Por ejemplo, todas estas son rutas válidas: "/Docs/doc.pdf": se refiere a la raíz absoluta del servidor, es decir desde el nombre de dominio en adelante. "../Img/image.jpg": ruta relativa a la página actual, un directorio por encima. "./files/features.js": se refiere a una ruta dentro de la carpeta que contiene a la página actual. "~/CSS/styles.css": ruta relativa a la raíz de la aplicación, que no tiene porqué coincidir con la raíz del servidor ya que puede que nuestra app cuelgue de una carpeta virtual, por ejemplo. Esto es algo que no siempre es tenido en cuenta. Y hay más combinaciones posibles, como por ejemplo el uso de los ../ por el medio de la propia ruta, etc... A vec... [Más]

Establecer correctamente DefaultButton y DefaultFocus en una página con Master Page

Establecer correctamente DefaultButton y DefaultFocus en una página con Master Page
En ASP.NET Web Forms algunos controles disponen de un par de propiedades interesantes para mejorar la usabilidad de la interfaz de usuario. Se trata de DefaultButton y DefaultFocus que permiten decidir respectivamente qué botón del formulario va a ser el que se ejecute al pulsar ENTER y qué control tendrá el foco en el formulario cuando éste cargue. Esto, que parece una tontería, es muy útil ya que es frecuente encontrarse por ahí páginas bastante mal hechas en las que, por ejemplo, vas a buscar algo en un cuadro de búsqueda, le das a ENTER tras introducir los términos de búsqueda en el cuadro de texto correspondiente, y en lugar de efectuarse la búsqueda lo que ocurre es que simplemente se recarga la página. El motivo es que cuando pulsas ENTER en un cuadro de texto, por defecto lo que hace cualquier navegador es enviar el formulario al servidor. Si resulta que tu código de búsqueda está en el evento Click de un botón o un ImageButton, no se lanza este evento de servidor y por lo tan... [Más]

Plantillas de lado cliente con JavaScript: ¿Qué tecnología utilizar?

Plantillas de lado cliente con JavaScript: ¿Qué tecnología utilizar?
En septiembre de 2009 Krasis Press lanzó al mercado mi libro “Tecnologías ASP.NET 4.0 (Saltando desde la versión 2.0)”. Fue un libro que se adelantaba en varios meses a la futura versión de la plataforma y el entorno de desarrollo. En el momento de escribirlo, en Julio de 2009, las últimas noticias sobre el lanzamiento del producto apuntaban a Octubre de 2009, y que muy pocos cambios iban a aparecer en la versión final. Por ello, a pocos meses vista de esa versión definitiva, aún con la Beta 1 de la plataforma, nos decidimos a lanzarlo al mercado. Trabajar con las Betas de Microsoft tiene muchas ventajas, pues te permite estar al cabo de la calle y adelantarte al mercado en las tecnologías que vendrán. Pero también tiene algunos inconvenientes, entre ellos que puede haber cambios de última hora que echen a perder el tiempo invertido. Al final, la versión definitiva de .NET 4.0 se fue retrasando y apareció el 12 de Abril de 2010. Este mayor ciclo de vida para las versiones previas del ... [Más]

Este soy yo y este es mi blog técnico, dedicado al software y a la programación.

¡Sígueme en Twitter!

Mis otros blogs

- JM Alarcón @ campusMVP.es
Contenido técnico en español orientado a desarrolladores
- JMAlarcon.es
Blog personal no técnico: sociedad, innovación, empresa...

Krasis

- campusMVP.es:
Los mejores cursos online de programación en español

- SELF LMS:
La plataforma de elearning más potente del mercado.

Histórico