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!
