Manejando Usuarios con los proveedores de asp.net en mi app

Hola gente de Geeks.


Si te gusta trabajar con los proveedores de datos de asp.net como a mi, sabras que la administracion de usuarios se maneja a travez de un sitio independiente. Pero que pasaria si pudieras integrar esto en tu aplicacion, pues te ahorraria tiempo y muchos dolores de cabeza.


En este post voy a indicar como identificar los usuarios de mi app. en los proximos post en como hacer un poco de adminstracion de estos mismos.


Primero lo primero, en estos post hacen referencia a los proveedores que maneja asp.net. Link 1, Link 2, Link 3.


Bueno, despues de crear usuarios y roles con la herramienta que trae VS y de comprobar la bd que se crea.


rol1


Primero vamos a mostrar cuantos usuarios hay y cuantos estan en linea, Ademas voy a cargar en un repetear las letras del alfabeto para buscar los usuarios.


 



   1: private MembershipUserCollection allUsers = Membership.GetAllUsers();
   2: protected void Page_Load(object sender, EventArgs e)
   3: {
   4:     if (!this.IsPostBack)
   5:     {
   6:         lblTotUsers.Text = allUsers.Count.ToString();
   7:         lblOnlineUsers.Text = Membership.GetNumberOfUsersOnline().ToString();
   8:  
   9:         string[] alphabet = «A;B;C;D;E;F;G;J;K;L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z;All».Split(‘;’);
  10:         rptAlphabet.DataSource = alphabet;
  11:         rptAlphabet.DataBind();
  12:     }
  13:  
  14: }

Luego voy a hacer una busqueda tanto por username como por mail.



   1: protected void btnSearch_Click(object sender, EventArgs e)
   2:     {
   3:         bool searchByEmail = (ddlSearchTypes.SelectedValue == «E-mail»);
   4:         gvwUsers.Attributes.Add(«SearchText», «%» + txtSearchText.Text + «%»);
   5:         gvwUsers.Attributes.Add(«SearchByEmail», searchByEmail.ToString());
   6:         BindUsers(false);
   7:     }

Ademas manejo unos eventos tanto del repeater como del gridview donde se cargan los datos.



   1: private void BindUsers(bool reloadAllUsers)
   2:     {
   3:         if (reloadAllUsers)
   4:             allUsers = Membership.GetAllUsers();
   5:  
   6:         MembershipUserCollection users = null;
   7:  
   8:         string searchText = «»;
   9:         if (!string.IsNullOrEmpty(gvwUsers.Attributes[«SearchText»]))
  10:             searchText = gvwUsers.Attributes[«SearchText»];
  11:  
  12:         bool searchByEmail = false;
  13:         if (!string.IsNullOrEmpty(gvwUsers.Attributes[«SearchByEmail»]))
  14:             searchByEmail = bool.Parse(gvwUsers.Attributes[«SearchByEmail»]);
  15:  
  16:         if (searchText.Length > 0)
  17:         {
  18:             if (searchByEmail)
  19:                 users = Membership.FindUsersByEmail(searchText);
  20:             else
  21:                 users = Membership.FindUsersByName(searchText);
  22:         }
  23:         else
  24:         {
  25:             users = allUsers;
  26:         }
  27:  
  28:         gvwUsers.DataSource = users;
  29:         gvwUsers.DataBind();
  30:     }
  31:  
  32:     protected void rptAlphabet_ItemCommand(object source, RepeaterCommandEventArgs e)
  33:     {
  34:         gvwUsers.Attributes.Add(«SearchByEmail», false.ToString());
  35:         if (e.CommandArgument.ToString().Length == 1)
  36:         {
  37:             gvwUsers.Attributes.Add(«SearchText», e.CommandArgument.ToString() + «%»);
  38:             BindUsers(false);
  39:         }
  40:         else
  41:         {
  42:             gvwUsers.Attributes.Add(«SearchText», «»);
  43:             BindUsers(false);
  44:         }
  45:  
  46:     }
  47:  
  48:     protected void gvwUsers_RowCreated(object sender, GridViewRowEventArgs e)
  49:     {
  50:         
  51:         if (e.Row.RowType == DataControlRowType.DataRow)
  52:         {
  53:             ImageButton btn = e.Row.Cells[6].Controls[0] as ImageButton;
  54:             btn.OnClientClick = «if (confirm(‘Esta seguro de eliminar esta cuenta?’) == false) return false;»;
  55:         }
  56:     }
  57:  
  58:     protected void gvwUsers_RowDeleting(object sender, GridViewDeleteEventArgs e)
  59:     {
  60:         
  61:         string userName = gvwUsers.DataKeys[e.RowIndex].Value.ToString();
  62:         ProfileManager.DeleteProfile(userName);
  63:         Membership.DeleteUser(userName);
  64:         BindUsers(true);
  65:         lblTotUsers.Text = allUsers.Count.ToString();
  66:     }

rol2


En los proximos articulos mostrare como actualizar informacion de los usuarios y roles. De esta forma no podremos depender de la administracion web que viene en VS. Por cierto el css que use fue el de Whidbey Rocks.


Codigo


Espero les guste mi pequeño aporte.


Saludos.


Romny

Publicado por

Romny Duarte

Ingeniero de sistemas con experiencia en desarrollo web y móvil, geek, amante de la lectura y de la tecnología.

5 comentarios sobre “Manejando Usuarios con los proveedores de asp.net en mi app”

  1. Rommy hay algo que no me gusta en esta clase por defecto del SQLMembership. Imagina que son 50000 usuarios, en una sola consulta va a traer todos los usuarios.

    Creo que este caso habría que personalizar una clase para hacer que soporte páginación personalizada tanto de SQL como de ASP.NET, en SQL 2005 con with, y ASP.NET usar el objectDataSource, que te da soporte a páginación personalizada fácilmente.

    En roles si creo que podrías usar la misma Clase, aunque no he encontrado (sin trabajo extra) te traiga los roles, y la descripción de ellos.

    Saludos,

  2. Si espinete, esta en cola…

    Rommy por cierto, otro add-in más :D, podrías tambien crear un método que te traiga sólo las primeras letras con contenido, así solo aparece las letras con datos: «A B G» :D.

    Saludos,

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *