Marc Rubiño

ASP.NET, C#, AJAX.NET, JavaScript, etc.

Sobre mi :

  • Marc Rubiño
    LinkedIn Twitter Geeks.ms

    Visitantes:

    Locations of visitors to this page

    Reconocimientos:

Recent Posts

Tags

Community

Email Notifications

Archives

January 2008 - Artículos

Custom MembershipProvider Y RoleProvider

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){    bool userExists = false;    OleDbCommand command = new OleDbCommand();   try    {      command.Connection = connection;      command.CommandText = "SELECT IDUsuario FROM Usuarios Where Nombre=@Nombre AND Pass=@Pass";      command.Parameters.AddWithValue("@Nombre", username);      command.Parameters.AddWithValue("@Pass", password);      command.Connection.Open();       OleDbDataReader rd = command.ExecuteReader();      if (rd.HasRows)         userExists = true;     }    Catch…

 

O CreateUser:

public override MembershipUser CreateUser(

string username, string password, string email,

string passwordQuestion, string passwordAnswer, bool isApproved,

object providerUserKey, out MembershipCreateStatus status){   MembershipUser newUser = null;   OleDbCommand command = new OleDbCommand();    try   {     command.Connection = connection;     command.CommandText = @"INSERT INTO Usuarios ( Nombre, Mail, Pass)                    VALUES (@Nombre, @Mail, @Pass )";     command.Parameters.AddWithValue("@Nombre", username);     command.Parameters.AddWithValue("@Mail", email);     command.Parameters.AddWithValue("@Pass", password);     command.Connection.Open();     command.ExecuteNonQuery();      newUser = new MembershipUser("Usuarios", username, null, String.Empty, String.Empty,String.Empty, true, false, DateTime.Now,DateTime.Now, DateTime.Now, DateTime.Now,DateTime.Now);       status = MembershipCreateStatus.Success;  }  Catch…

La clase Roles que hereda de RoleProvider e implementaremos métodos como:

public override string[] GetAllRoles(){    OleDbCommand command = new OleDbCommand();    List<string> resultado = new List<string>();    try    {      command.Connection = connection;      command.CommandText = "SELECT Rol FROM Roles";      command.Connection.Open();      OleDbDataReader rd = command.ExecuteReader();      while (rd.Read())         resultado.Add(rd.GetString(0));      return resultado.ToArray();    }    Catch…

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">  <providers>   <clear/><add name="Usuarios" type="Demo.Seguridad.Usuarios" connectionStringName="MyProviderConnectionString" minRequiredNonalphanumericCharacters="0" requiresQuestionAndAnswer="false" enablePasswordReset="true"/>  </providers>

</membership>

Definimos nuestro proveedor como proveedor por defecto y sus propiedades.

<roleManager enabled="true" defaultProvider="Roles"> <providers>  <clear/>  <add name="Roles" connectionStringName="MyProviderConnectionString" type="Demo.Seguridad.Roles"/> </providers></roleManager>

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

 

LoNetCamp da sus primeros pasos

El pasado 18 de Enero del 2008 fue definitivamente un gran día para la nueva historia del LoNetCamp.

Después de muchos preparativos y la convicción de sus promotores que la idea no se quedara en un simple intento, pudimos asistir a la primera reunión abierta del grupo.

La iniciativa a pasado por diferentes estados y por supuesto no esperábamos que tuviera tanta acogida la primera charla, la asistencia fue todo un éxito, unas treinta personas entre profesionales y estudiantes del IES Baix Camp contribuyeron a que la velada se cerrara con la convicción de que el grupo puede tener futuro en la Provincia para promover y facilitar la asimilación de todas las novedades que van surgiendo continuamente en este gran mundo del desarrollo de software.

 La charla transcurrió con fluidez y se trató de mostrar las entrañas de la plataforma de .NET para que en los próximos eventos podamos afrontar todas las novedades con los conocimientos suficientes de la filosofía de la tecnología .NET.

 Y como una imagen vale más que mil palabras...

 

Todas las Fotos en http://lonetcamp.com/Community/photos/eventos/category1057.aspx

Nos Vemos en la próxima.

CrossPosting http://lonetcamp.com

 

 

Posted: 19/1/2008 21:28 por Marc Rubiño | con 3 comment(s)
Archivado en:
Primer Evento Oficial del Grupo en TARRAGONA

Primer Evento Oficial  !!!!

Introducción:
 
Con este evento pretendemos presentar el grupo de usuario de la provincia de Tarragona y aprovechar para charlar de la evolución de nuestros desarrollos y como .Net nos ha ayudado a resolver las nuevas necesidades.
 
Veremos como ha evolucionado esta plataforma y con que nuevas herramientas contaremos para este año.
 

Agenda:

19:00 Registro
19:15 Presentación del Grupo
19:45 La evolución de .Net ( Marc Rubiño )
20:45 Nuevos Eventos
21:00 Cierre

Fundació Universitat Rovira i Virgili (Mas Miarnau)
Av Onze de Setembre,112 (43203) Reus - TARRAGONA

Como Llegar...

Registro:  msevents.microsoft.com


 

Posted: 2/1/2008 10:46 por Marc Rubiño | con 2 comment(s)
Archivado en: