martes, noviembre 30, 2010

Cómo crear administración de usuarios en ASP.Net

1) Editar el fichero web.config:



2) Crear la clase MiAppRoleProvider, que derive de RoleProvider. Hacer botón derecho sobre ésta última para "Implementar clase base" (<- Creará el esqueleto de los métodos abstractos). Insertar en los métodos recién creados el código pertinente.

Nota: Los métodos que no soporte nuestra aplicación, deberían lanzar una excepción NotSupportedException en vez de NotImplementedException.
3) Idem para MiAppMembershipProvider, que derive de MembershipProvider.

4) Modificar la clase MiAppRoleProvider:

4.1) Crear una variable miembro privada string _applicationName = "MiAplicacion";
4.2) Implementar el get/set de la propiedad ApplicationName, retornando/asignando la variable anterior.
4.3) Implementar el método GetAllRoles con return new string[] {"Administrador", "Técnico"} o algo del estilo.
4.4) Implementar el método GetRolesForUser, que tiene que devolver el rol (string) del usuario dado.
5) Modificar la clase MiAppMembershipProvider según convenga (no lo detallo).
6) Los métodos de nuestro proyecto a los que queramos restringir para el rol Administrador (p.e.) deberemos ponerles un atributo tal como este: [PrincipalPermission(SecurityAction.Demand, Authenticated=true, Role="Administrador"). También se pueden restringir permisos por nombre de usuario además de por rol.
Nota: Se deben incluir los namespaces System.Security.Principal y System.Security.Permissions.
7) Para el UI, se utilizar el control asp:Login haciendo las adaptaciones oportunas (de diseño y/o comportamiento).

viernes, noviembre 05, 2010

Ejemplo básico de uso de LINQ

1. Nuevo proyecto WinForms
2. Añadir a formulario (name=grdPelis). Acoplar a contenedor primario.
3. Agregar al proyecto un nuevo elemento de tipo "Clases de LINQ to SQL" (name=MSDNVideo).
4. Clicar sobre "Explorador de servidores" en la superficie de diseño del nuevo elemento dbml.
5. Arrastrar la(s) tabla(s) (o vistas) que sea menester (p.e. Peliculas) desde el "explorador de servidores" a dicha superficie.
6. En el Form_Load() añadir el siguiente código:
MSDNVideoDataContext dc = new MSDNVideoDataContext();

BindingList pelis = new BindingList();

var query = (from pelicula in dc.Peliculas select pelicula).Take(10).Skip(2);

foreach (Pelicula peli in query)
{
pelis.Add(peli);
}

this.grdPeliculas.DataSource = pelis;