Compartir a través de


ASP.NET: Como usar Membership Provider en aplicaciones WINFORM (es-ES)

Podemos usar el conocido membership provider de ASP.NET en nuestras aplicaciones winform.

Cual es el goal? El membership de ASP.NET es realmente una vía completa par administrar usuarios y roles (Create,Edit,Delete, reglas de acceso a formularios, reglas de acceso a paginas ).

Como lo implementamos?

Formulario de login

Primero creamos un formulario de login que se conecta a la base de datos ASPDBNET.mdf (generada automaticamente en un proyecto asp.net)

El codigo del boton login debe ser :

VB

Imports System.Security.Principal Imports System.Web.SecurityPrivate Sub OK_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles OK.Click
    If Membership.ValidateUser(UsernameTextBox.Text, PasswordTextBox.Text) Then
      '''' treatment if authenticated
   
    Else
       ''''
    End If
  End Sub

C#

using System.Security.Principal;
using System.Web.Security;
 
private void   OK_Click(System.Object sender, System.EventArgs e)
{
  if (Membership.ValidateUser(UsernameTextBox.Text, PasswordTextBox.Text)) {
  }
  // treatment if authenticated
 
  else {
    //
  }
}

app.config

Al mismo tiempo necesitamos configurar el app.config y agregar la siguiente configuración: 

<system.web>
  <membership defaultProvider="AspNetSqlMembershipProvider">
   <providers>
      <remove name=AspNetSqlMembershipProvider"/>
    <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider"connectionStringName="AspNetConnectionString" enablePasswordRetrieval="false" enablePasswordReset="true"requiresQuestionAndAnswer="false" applicationName="AspNet" requiresUniqueEmail="false"passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="7"minRequiredNonalphanumericCharacters="1" passwordAttemptWindow="10" passwordStrengthRegularExpression=""/>
   </providers>
  </membership>
  <roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider" cacheRolesInCookie="true"createPersistentCookie="false" cookieProtection="All">
   <providers>
    <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider"applicationName="AspNet" connectionStringName="AspNetConnectionString"/>
   </providers>
  </roleManager>
 </system.web>

las reglas de acceso por roles 

Una vez autenticado y redireccionado a otro winform podemos detectar usuarios actuales y trabajar en las reglas de acceso por roles 

VB

''' treatment for current user
nom = Thread.CurrentPrincipal.Identity.Name
    Dim user As MembershipUser = Membership.GetUser(nom)
    Dim identity As New GenericIdentity(user.UserName)
    Dim principal As New RolePrincipal(identity)
    Threading.Thread.CurrentPrincipal = principal
        If Roles.GetRolesForUser(nom).Length = 1 Then
      rolesArray = Roles.GetRolesForUser(nom)
      role = rolesArray.First.ToString
      ''' enable controls for examples for the role of current user
    Else '' disable controls
    End If
   

C#

using System.Security.Principal;
using System.Web.Security;
public class  AddUser
{
  private void  Button1_Click(System.Object sender, System.EventArgs e)
  {
    MembershipUser user;
    user = Membership.CreateUser(TextBox1.Text, TextBox2.Text);
    MsgBox(TextBox1.Text + "is created successfully");
    this.Dispose();
  
  }
}

crear un usuario

Para crear un usuario usted puede crear un winform con simples textboxes (encriptado para el password) y usar ese codigo 

VB

Imports System.Security.Principal
Imports System.Web.Security
Public Class AddUser
 
  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesButton1.Click
    Dim user As MembershipUser
    user = Membership.CreateUser(TextBox1.Text, TextBox2.Text)
    MsgBox(TextBox1.Text & "is created successfully")
    Me.Dispose()
 
  End Sub
End Class

C#

using System.Security.Principal;
using System.Web.Security;
public class  AddUser
{
  private void  Button1_Click(System.Object sender, System.EventArgs e)
  {
    MembershipUser user;
    user = Membership.CreateUser(TextBox1.Text, TextBox2.Text);
    MsgBox(TextBox1.Text + "is created successfully");
    this.Dispose();
  
  }
}

See Also