El modelo de Proveedores desde su aparición con ASP.NET 2.0 ha sido un tema muy recurrente y se han escrito ríos de tinta sobre sus beneficios, pero ya sea porque realmente nos encontraremos en muchas ocasiones que los proveedores por defecto no cubren todas nuestras necesidades o porque hemos migrado una aplicación donde ya tenemos todos los datos o simplemente porque no tengo tanta imaginación, en este artículo mostraré como poder crear nuestro propio proveedor.
ASP.NET 2.0 ofrece soporte para el modelo de proveedores para diferentes servicios:
-
Membership
-
System.Web.Security.SqlMembershipProvider
-
System.Web.Security.ActiveDirectoryMembershipProvider
-
-
Roles
-
System.Web.Security.SqlRoleProvider
-
System.Web.Security.AuthorizationStoreRoleProvider
-
System.Web.Security.WindowsTokenRoleProvider
-
-
Profile
-
System.Web.Profile.SqlProfileProvider
-
-
SessionState
-
System.Web.SessionState.InProcSessionStateStore
-
System.Web.SessionState.OutOfProcSessionStateStore
-
System.Web.SessionState.SqlSessionStateStore
-
-
Configuration
-
System.Configuration.DPAPIProtectedConfigurationProvider
-
System.Configuartion.RSAProtectedConfigurationProvider
-
-
SiteMap
-
System.Web.XmlSiteMapProvider
-
-
WebEvents
-
System.Web.Management.EventLogWebEventProvider
-
System.Web.Management.SimpleMailWebEventProvider
-
System.Web.Management.SqlWebEventProvider
-
System.Web.Management.TemplatedMailWebEventProvider
-
System.Web.Management.WmiWebEventProvider
-
System.Web.Management.TraceWebEventProvider
-
-
WebParts
-
System.Web.UI.WebControls.WebParts.SqlPersonalizationProvider
-
La intención de este artículo no es profundizar en el modelo de proveedores sino aprovechar toda su potencia, imaginemos que tenemos una aplicación web que hemos migrado o que simplemente tiene que aprovechar los datos de otra aplicación, entonces crearemos nuestro proveedor basándonos en las clases MembershipProvider y RolProvider para que se adapte a nuestras necesidades.
Empezaremos con la base de datos en Access que hemos aprovechado de otra aplicación 😉
Como podéis observar simplemente tenemos una tabla de usuarios una de roles y una tabla intermedia de UsuariosPorRol.
Crearemos nuestro primer proveedor con la clase Usuarios que herede de MembershipProvider, que al ser una clase abstracta nos facilitara la manera de implementar un proveedor de este subsistema Membership.
No es necesario sobreescribir todos los métodos de esta clase, solo los que tengamos que utilizar posteriormente.
Por ejemplo el método ValidateUser:
public override bool ValidateUser(
string username, string password)
O CreateUser:
public override MembershipUser CreateUser(
string username, string password, string email,
string passwordQuestion, string passwordAnswer, bool isApproved,
object providerUserKey, out MembershipCreateStatus status)
La clase Roles que hereda de RoleProvider e implementaremos métodos como:
public override string[] GetAllRoles()
Una vez que tenemos nuestros proveedores creados ya los podemos utilizar y para eso los tenemos que definir en el web.config de nuestra aplicación.
<membership defaultProvider=«Usuarios«>
</membership>
Definimos nuestro proveedor como proveedor por defecto y sus propiedades.
<roleManager enabled=«true« defaultProvider=«Roles«>
Para probar nuestros proveedores crearemos una página de login con un control asp:Login, una página de registro para crear nuevos usuarios con un control asp:CreateUserWizard.
Y el proyecto funcionando se mostraría como
Para que podáis estudiar mejor el proyecto os lo podéis bajar desde: geeks.ms/…/entry67524.aspx
CrossPosting de http://mrubino.net