Tag Archive for security

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!

Tu propio MembershipProvider en ASP.NET