Archive for August 22, 2009

Disminuyendo el ViewState, reutilizando los cambios

Tu propio RoleProvider en ASP.NET

Ayer mencioné lo simple y sencillo de escribir tu propio MembershipProvider y soportar nuestro propio esquema de autenticación de credenciales usuario/contraseña sin necesitar al SqlMembershipProvider que viene con ASP.NET, bien, hoy mencionaré lo simple y sencillo que es implementar nuestro propio RoleProvider y soportar autorización simple en ASP.NET casi out-of-the-box.

De la misma manera que funcionó con nuestro MembershipProvider customizado, simplemente debemos heredar de System.Web.Security.RoleProvider y aunque al igual que su prima la MembershipProvider, es una clase abstracta y debemos implementar todos su métodos, el único necesario para soportar roles en ASP.net es GetRolesForUser(string username)

using System.Web.Security;

namespace MyAuthentication {
    public class MyRoleProvider {
        public string[] GetRolesForUser(string username) {
            if (username == "admin")
                return new[] {"Administrator", "User" };
            else
                return new[] {"Administrator"}
        }
        // Aqui implementamos el resto de la clase abstracta
        // Un simple throw new NotImplementedException bastara
    }
}

Como todo Provider de ASP.NET debemos configurarlo en su Web.Config

<system.web>
    <!-- aqui va todo lo de authentication -->
    <authorization>
        <allow roles="Users" />
        <deny users="?" />
    </authorization>
    <roleManager defaultProvider="myRoleProvider" enabled="true">
        <providers>
            <clear />
            <add name="myRoleProvider"
                 type="MyAuthentication.MyRoleProvider, MyAuthentication" />
        </providers>
    </roleManager>
    <!-- El resto del web.config -->
</system.web>
<!-- solo el rol Admininstrator puede entrar a la carpeta Admin -->
<location path="Admin">
    <system.web>
        <authorization>
            <allow roles="Administrator" />
            <deny users="*" />
        </authorization>
    </system.web>
</location>

¿Fácil verdad?

Espero que les sea de utilidad a más de alguien.

Saludos!

El ViewState en ASP.NET 4.0

Hace ya muchas semanas atrás escribí sobre como comprimir el ViewState en ASP.net y así disminuir lo mayor posible el tamaño del ViewState renderizado en el cliente. Mi método era bien sencillo y simple (y al parecer usado por gente con Scott Hanselman), intentamos usando la compresión Zip (buen ratio), la 7Zip (excelente ratio), y la GZip incluída con la System.IO.Compression en la .Net Framework.

Hoy me entero leyendo la ASP.net Pro Magazine que ASP.net 4.0 incluirá soporte para comprimir el ViewState usando GZip de una manera muy similar a la que usamos en mi post anterior sobre el ViewState, bueno saber que ahora va a venir incluída!

Using Automapper with Castle Windsor

Tu propio MembershipProvider en ASP.NET