3 – MVC 3 con Razor ~ Trabajando con Membership

Hola gente, continuando con el proyecto anterior, hoy vamos a hablar de como utilizar ASP.NET Membership que fue una herramienta que me resulto muy útil cuando trabajaba con los proyectos de páginas ASP.NET comunes, pero que es Membership, para el que no sabe, les dejo una breve descripción.

La API de Membership que viene con ASP.NET, y en concreto el proveedor de Membership para trabajo contra SQL Server –SqlMembershipProvider nos provee de medios para almacenar información básica sobre usuarios, el nombre, su login y su clave, etc. En este gráfico pueden ver la estructura completa creada por ASP.NET, hay herramientas como aspnet_regsql.exe para que puedan utilizar la base de datos de Membership  en sus base de datos para dar soporte a SqlMembershipProvider y relacionados.


Bueno ahora vamos a empezar con el ejemplo, primero vamos abrir nuestro proyecto MVC 3 con Visual Studio 2010 y después vamos Proyecto y después a Configuración de ASP.NET.
image

Esto nos abre la parte de configuraciones de nuestra aplicación y nos permite crear variables de aplicación, usuarios, habilitar la parte de Roles y dar permisos en nuestras carpetas.
image

Esto llena directamente el Web.config por nosotros con las configuraciones necesarias, en esta oportunidad lo hago con la herramienta que viene incluida de configuraciones de aplicación, vamos a habilitar la utilización de roles y agregar dos roles, despues vamos a agregar dos usuarios.
imageimageimage

Ahora vamos a nuestro proyecto Web MVC 3 y le vamos a crear una carpeta.
image

Después agregamos los archivos que creamos en los POST a esta nueva carpeta, para hacer más fácil y también agregue un nuevo control DataUserController donde puse las acciones de estas paginas.
image

Ahora vamos abrir nuevamente la herramienta de Configuracion de ASP.NET, esto nos abre la pagina de administración de la aplicación y ahí nos vamos a Seguridad y después a Administración de reglas de acceso.
image

Pues bien antes en ASP.NET clásico solo teníamos que indicar la carpeta que queriamos que entrara un usuario o un grupo de Role determinado, por ejemplo aquí abajo he puesto que solo los Roles de Administrador puedan entrar a la Carpeta DatosUser.
image 

Esto hacia que un usuario con el Rol Administrador pueda ingresar a esta carpeta y todos los demás no puedan. Bien en este caso tenemos cargados nuestros Roles y Usuarios entonces en MVC 3 para usarlo ya no tenemos que cargarlo a nivel de web.config ahora lo podemos cargar a nivel de Controller, Métodos o clases, en este caso solo tendríamos que indicar [Autorize(Roles=”Administrador”)] sobre toda la clase DatosUserController y esto no nos dejaria entrar a todas las Page que dependan de este Controller.

namespace MVC3Razor.Controllers
{
    [Authorize(Roles="Administrador")]    
    public class DatosUserController : Controller
    {
        // Utilizando el modelo Users
        private static Users usuarios = new Users();

        // Creamos un ActionResult para la lista de usuarios 
        public ActionResult UsuariosList()
        {
            return View(usuarios.listaUsuario);
        }
// --------------------------------


Por ejemplo, acá tenemos un usuario con el Rol de Contendista intentando acceder a la Page Lista de Usuarios.

image


Ahora vamos a iniciar sesión con un usuario Administrador y en este si nos deja acceder.

image


Pero a todo esto hemos iniciado sesión pero nunca les mostré la base de datos y donde se guardan estos datos, bueno si ustedes se van a su aplicación y poner agregar nuevo archivo existente en la carpeta App_Data.

image

Ahora vamos al directorio de nuestra aplicación y en la carpeta App_Data van a ver dos archivos de base de datos que estan excluidos del proyecto pero n realidad en el web.config esta es la base de datos a tacha cuando iniciamos la herramienta de configuración, en el web.config también podemos configurar otra db, pero tenemos que asegurarnos que tiene la misma estructura que esta db de ejemplo.

image

Pues bien ahora si incluimos la db de seguro podremos navegarla desde nuestro VS2010 para ver las tablas y sp que tenemos.

imageimage


Bueno ya hemos hablado bastante, ahora por ultimo voy a agregar unas líneas para ver lo fácil que es para utilizar , nos vamos a una pagina ya existente que en este caso vamos a abrir la Index.cshml y n el content escribimos lo sigueintes.

@{
    ViewBag.Title = "Principal";
}

<h2>@ViewBag.Message</h2>
<p>
    
    @if (Request.IsAuthenticated)
{
    <text>
        Usted inicio sesión el @DateTime.Now.ToString("yy|MM|dd hh:mm:ss") <br />
        Su usuario es @Context.User.Identity.Name <br />
    </text>
}
else
{
    <text>
        Todavia no se ha iniciado sesión.
    </text>
}

</p>

Si lo ejecutamos vemos esto.

image

image


Bueno espero que les allá gustado, esto de Membership es bastante completo, viene con sp incluidos que hacen un montón de trabajo y en conjunto con los Profile, los invito a que sigan investigando., en resumen, hasta el momento hemos aprendido a:

Configuraciones básicas para Membership con la herramienta de Configuración de ASP.NET

Habilitar el uso de Roles, Agregar Usuarios y Roles.

Asignar el permiso de los roles a los controladores.

Insertar código si esta logueado el usuario.

Recomendaciones:

Webmatrix Parte 6, Creando un formulario para agregar datos

WebMatrix parte 7 – Creando una página de edición de datos

Para el proximo POST voy a hablar de la palabra reservada @model y también vamos a trabajar con Layout y template ya creados para insertarlos en nuestras aplicaciones, esta parte es porque salieron varias consultas sobre como implementar template varios en mi proyecto MVC.

Para cualquier consulta pueden dejar sus mensajes aquí o mandar me un correo electrónico a Moises.Rivas@msptechrep.com.

Anuncios

13 Comentarios Agrega el tuyo

  1. Alejandro dice:

    Gracias por tu post esta bastante explicativo, pero necesito que esto se integre con una bd que tengo creada para mi proyecto. Dime si sabes como lograrlo.

    1. Este tutorial esta destinado a mostrar como funciona Mermbership directamente con la base de datos por default, si tuvieras una base de datos tienes dos formas, una es convertirla para que trabaje con el modelo Membership con la herramienta de registración que se llama aspnet_regsql, esta va a crear una seria de tablas y store procedure que se relacionan, aquí tienes un ejemplo http://youtu.be/2-D3CB4_BAY, la otra forma seria que tuvieras tus propias tablas creadas y quieras que se utilicen, esto lo haces con otro componente que se llama Simple Membership, trabaja con Entity Framework, te dejo 3 ejemplos:

      Link 1: http://blog.osbornm.com/archive/2010/07/21/using-simplemembership-with-asp.net-webpages.aspx,
      Link 2: http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5-web-forms-and-asp-net-mvc-4-templates.aspx,
      Link 3: http://blog.spontaneouspublicity.com/including-asp-net-simple-membership-tables-as-part-of-your-entity-framework-model

      Desde ya gracias por visitar mi blog, un abrazo y espero haberte ayudado.

  2. Juan Jose Castro dice:

    Hola, muy buenos tus articulos, te molesto porque no logro comprender porque cuando me lleva a la pagina de configuracion, me dice:

    There is a problem with your selected data store. This can be caused by an invalid server name or credentials, or by insufficient permission. It can also be caused by the role manager feature not being enabled. Click the button below to be redirected to a page where you can choose a new data store.

    The following message may help in diagnosing the problem: Unrecognized configuration section authentication. (C:\Users\jcastro\Documents\Visual Studio 2010\Projects\Seguimientos\SeguimientosDv\web.config line 153)

    y en mi web config la linea 153 comienza asi:

    antes tengo:

    en connectionStringName le puse a mano yo el “SeguimientosEntities” a ver si funcionaba.

    Agradeceria cualquier ayuda al respecto!

    1. Juan Jose Castro dice:

      No salieron los codigos:
      el web config dice:

    2. Hola Juan, veo que estas utilizando EDM o algún ORM, este tutorial esta destinado a trabajar con Membership directamente contra la base de datos, pero hay un Framework que se llama Simple Membership que he utilizando que trabaja con Entity Framework, te paso un link para que veas como se trabaja
      Link 1: http://blog.osbornm.com/archive/2010/07/21/using-simplemembership-with-asp.net-webpages.aspx,
      Link 2: http://weblogs.asp.net/jgalloway/archive/2012/08/29/simplemembership-membership-providers-universal-providers-and-the-new-asp-net-4-5-web-forms-and-asp-net-mvc-4-templates.aspx,
      Link 3: http://blog.spontaneouspublicity.com/including-asp-net-simple-membership-tables-as-part-of-your-entity-framework-model

      Y gracias por visitar mi blog que medio dejado lo tengo, dentro de poco voy a empezar a agregarle nuevos POST de Windows 8, Windows Phone y MVC 4.

      Saludos

  3. wells dice:

    buen dia…. muy buen tutorial pero solo tengo una pregunta, tengo una base de datos en un servidor, y me gustaria que los datos salgan de ahi y no de manera local. yo hago ingresos, ediciones etc a esa base de datos pero no se como hacer para conectar mi tabla de usuarios a esto

    1. Para esto solo tendrias que cambiar el ConnetionString y ver que la base este convertida al formato de Membership, aquí te dejo un link http://www.josuepanameno.info/2010/01/05/membership-en-base-de-datos-sql/

  4. daniel soler dice:

    Hola Moises,
    muy buen tuto!!
    tengo una duda, si usas la validacion que trae por defecto el mvc (accouncontroller y etc..) puedes usar el usuario q se valide para usarlo en selects que se necesitaran en tablas mas adelante?
    por ejemplo: creo una cuenta q sea elena y maria, que seran las secretaria y ellas una vez logeadas tienen que insertar datos mediante un formulario, puedo saber que usuario es el logeado para guardarlo en un campo de la tabla pertinente?

    gracias!!

    1. Hola Daniel, primero que nada gracias por pasar por mí blog, con respecto a lo que me consultas existe lo que se llama Profile en Membership donde podes agreagr un monton de datos a nivel de usuario y estos se agregan facilmente, mira justo hace poco me paso mi amigo Guillermo Bellmann un post http://bit.ly/AxIulb de Scott Hanselman donde habla de como agregar Membership desde una base de SqlServer CE 4.0 y como le agrega despues datos al usuario con una clase y así los vincula con los Profile.

  5. Marcelo dice:

    Gracias por la explicacion me ayudo a entender la parte de como se manejan los metodos y las vistas, ahora bien veo que tienes los archivos de como Create, delete,Edit y list users.
    esos paginas que creaste podrias pasarmelas, ya que no veo como fueron generadas, para tener un mayor contexto de lo que hiciste , seria de gran ayuda para mi poder ver el codigo para poderle entender.

    Gracias por contestarme.

    Saludos.

    1. Esas son las vistas de los metodos que contienen los controladores, esas se crean automaticamente haciendo boton derecho sobre el metodo y presionando agregar nueva vista, de ahi te sale un panel con opciones donde le decis que necesitas hacer, mira acá abajo te dejo unos video-tutoriales de como se hace http://www.pluralsight-training.net/microsoft/players/PSODPlayer.aspx?author=scott-allen&name=mvc3-building-views&mode=live&clip=0&course=aspdotnet-mvc3-intro, tambien podes visitar la página oficial http://www.asp.net/mvc donde salen un montón de ejemplos.

  6. Marcelo dice:

    Hola a todos.

    estoy empezando en esta onda del MVC 3 con Razor y intentaba hacer algo exactamente como lo que tu hiciste en esta seccion solo que me confundi despues de que agregas la carpeta nueva y creas el nuevo control DataUserController, perdonen mi ignorancia en la pregunta pero voy empezando y aun no comprendo bien esto, si me podrias explicar un poco mas sobre esto te lo agradeceria y mas sobre este ejemplo ya que es exactamente lo que necesito.

    Saludos.

    1. Hola Marcelo, te cuento que el DataUserController se encuentra en la carpeta Controller y para no complicar solamente mencione que ahi dentro puse algunos metodos donde le indico si tiene que tener acceco o no a este Metodo, por lo general en MVC vas a notar que se trabaja con el metodo y despues con la vista, osea que un metodo puede tener una vista o un retorno que haga otra cosa que no sea una vista, entonces agregando [Authorize(Roles=”Administrador”)]
      Podes hacer que determinados roles puedan tener acceso a estos metodos.

      Bueno espero haber despejado un poco tus dudas, disculpa si no es puntualmente lo que estabas preguntando.

      Saludos

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s