Esta es una traducción aproximada del artículo Business Apps Example for Silverlight 3 RTM and .NET RIA Services July Update: Part 3: Authentication en la serie “Business Apps Example for Silverlight 3RTM and .NET RIA Services” publicada en inglés por Brad Abrams en 2009. Los artículos originales están basados en su charla de Mix09 “Building Amazing Business Centric Applications with Microsoft Silverlight 3”.

 

Autenticación

Es normal en el mundo empresarial dar gran importancia a fiscalizar el flujo de información. No sólo es importante ésta llegue a quienes la necesitan, sino también prevenir su acceso a personas no autorizadas.  Veamos cómo se puede implementar tal control con Silverlight 3  y los servicios RIA.

La tarea es simplificada en gran manera con la plantilla Silverlight Business Application. La solución generada viene pre-configurada para usar los servicios de autenticación de ASP.NET conocidos por su gran flexibilidad en la administración de usuarios.

Para este artículo en particular, vamos a usar el método de autenticación mediante formularios, haciendo notar que se puede también usar el método de autenticación de Windows con tan sólo hacer unos pequeños ajustes al código. Los ejemplos son basados en la aplicación utilizada a través de esta serie. Recomiendo descargar la solución para seguir los pasos a mano.

 

Para iniciar la sessión hay que usar el enlce "login".

 

Como la aplicación no está conectada a ningún registro de usuarios, tenemos que crear uno nuevo. Haciendo clic en el enlace “login” el sistema verifica su ya estamos registrados y nos provee con un formulario en caso contrario.

 

Si no se tiene cuenta en el sistema, hay que registarse como nuevo usuario.

 

El formulario está equipado con el mecanismo de verificación de datos revisado en el artículo anterior.

 

El formulario de registro está configurado para verificar la validez de los datos.

 

Una vez registrados, el programa conoce nuestra identidad:

 

Al iniciar la sessión, el sistema se mantiene pendiente de la identidad del usuario.

 

Algo que evidentemente no está bien es que todos los mensajes y las etiquetas están en inglés. Afortunadamente, la interfaz es completamente configurable y se puede alterar para que despliegue la información en español.

Por supuesto, parte de la idea de usuarios registrados es poder controlar sus privilegios de acceso. Por ejemplo, supongamos que sólo usuarios autenticados pueden ver la planilla de Súper Héroes. No hay apuro, para ello vamos a la clase SuperEmpleadoService y decoramos el método de consulta GetSuperEmpleadoConjunto con el atributo RequiresAuthentication.

 

[RequiresAuthentication]
public IQueryable GetSuperEmpleadoConjunto()

 

Además de RequiresAuthentication, hay otros atributos que ayudan a refinar el control de acceso al sistema. Para más información se puede consultar la biblioteca MSDN sobre el ámbito de System.Web.DomainServices.

Si intentáramos ejecutar la aplicación en su presente estado, recibiríamos un error, porque al principio el usuario todavía no ha sido autenticado. Como resultado, el método de consulta GetSuperEmpleadoConjunto se niega a proceder, haciendo que Silverlight se dé por vencido en completa confusión.

Para resolver el problema, debemos instruir al sistema sobre qué hacer en caso de un error de consulta no autorizada. De manera muy conveniente, el control DomainDataSource ofrece un evento para notificar cuando una operación de consulta ha terminado (LoadedData) proveyendo información sobre sus resultados mediante LoadedDataEventArgs. Así que lo primero es conectar el evento con un método de respuesta (por si acaso, dds es usado en Home.xaml):

 

 

Y definirlo en el código subyacente:

 

private void dds_LoadedData(object sender, LoadedDataEventArgs e)
{
    if (e.HasError)
    {
        IndicadorDeProgreso.IsActive = false;
        e.MarkErrorAsHandled();
    }
}

 

Si ha ocurrido un error durante la operación Load, entonces la propiedad HasError en el argumento LoadedDataEventArgs será verdadera. En tal caso, desactivamos el indicador de progreso y le indicamos al DomainDataSource que hemos solucionado el problema, haciendo que se mantenga tranquilo.

Con tales precauciones, es posible ahora ejecutar la aplicación:

 

Si el susuario no se identifica, el sistema no permite el acceso a los datos.

 

Como esperábamos, si el usuario no está autenticado, no habrá información que enseñar. Al iniciar la sesión y refrescar la página, los empleados serán visibles de nuevo.

 

En cambio, un usuario registrado en el sistema sí tiene acceso a la información.

Etiquetas asignadas:
 

2 Respuestas a “Ejemplo de desarrollo de sistemas empresariales con Silverlight 3 y servicios RIA en .NET – Parte 3”

  1. Dandy dice:

    He realizado todos los pasos de este artículo exactamente como los has escrito, pero cuando voy a añadir un nuevo elemento, en el campo Employee ID siempre me coje el valor cero. Por tanto no me deja incluir un nuevo elemento, ya que se repite el mismo Id.
    Sabrias decirme porque me pasa esto??
    Gracias!!

    • David Mora dice:

      Dandy,

      El id del empleado permanece como cero en el cliente puesto que no recibe un valor definitivo hasta que se envían los cambios a la base de datos en el servidor. Tanto la cuadrícula como el formulario de adición son capaces de manejar la situación de varios nuevos empleados sin id asignado.

      Pareciera que el conflicto se origina en el servidor; más específicamente en la base de datos. Tal vez sea buena idea revisar que la especificación de identidad del campo EmployeeID esté configurada correctamente.

Responder



Licencia de uso

El contenido de las traducciones está sujeto a los términos de protección de derechos de uso de los autores originales quienes han autorizado su publicación en este blog. Asegúrese de entender los terminos de la licencia de cada autor antes de usar tal contenido.

Mis propios artículos son publicados bajo los términos de la Licencia Reconocimiento-Compartir bajo la misma licencia 3.0 Estados Unidos de Creative Commons:

Creative Commons License
Blog de Maromas Digitales by Maromas Digitales, LLC is licensed under a Creative Commons Reconocimiento-Compartir bajo la misma licencia 3.0 Estados Unidos License.

License

The contents of all translated articles is subject to the copyright and licensing terms of the original authors and has been published here with their express permission. Verify the original author's licensing terms before using the contents of these articles.

My own articles are licensed under the Creative Commons Attribution-Share Alike 3.0 United States License:

Creative Commons License
Blog de Maromas Digitales by Maromas Digitales, LLC is licensed under a Creative Commons Attribution-Share Alike 3.0 United States License.