ASP .NET - MVC Music Store - Implementando a autenticação e associação


Quando criamos o controlador StoreManagerController para criar estrutura básica para edição de dados em nossa aplicação não nos preocupamos em restringir o acesso de modo que qualquer pode acessar e realizar as operações de edição dos dados definidas.

Vamos alterar esse comportamento de forma a restringir a permissão somente aos administradores do site.

Implementando a autenticação e associação: criando o controller AccountManager e respectivas Views

O controlador AccountManager é criado por padrão quando criamos uma aplicação ASP .NET MVC usando o template ASP.NET MVC 3 Web Application . Como nossa aplicação foi criada usando o template ASP.NET MVC 3 Empty Web Application o controlador AccountManager não foi criado.

Então vamos fazer o seguinte: vamos incluir um novo controlador na pasta Controllers chamado AccountManager:

Clique com o botão direito do mouse sobre a pasta Controlles e selecione Add-> Controller e a seguir informe o nome AccountController e selecione o template Empty Controller e clique no botão Add:

Agora vamos criar outra aplicação ASP .NET MVC abrindo uma nova cópia do Visual Studio 2012 e selecionando o menu File-> New Project e a seguir escolhendo o template ASP .NET MVC 3 Web Application e informando o nome TesteMVC ; para concluir clique no botão OK;

Na próxima janela selecione o template Internet Application e o Engine Razor e clique em OK;

Com isso estamos criando um novo projeto ASP .NET MVC 3 onde teremos um controlador AccountManager Criado por padrão. Vamos agora copiar os seguintes arquivos do projeto recém-criado para o nosso projeto original:

  1. Copie o arquivo AccountManager.vb da pasta Controllers para a pasta Controllers do projeto MvcMusicStore;
  2. Copie o arquivo AccountModels.vb da pasta Models para a pasta Models do projeto MvcMusicStore;
  3. Crie um diretório Account no interior da pasta Views do projeto MvcMusicStore e copie todos os 4 arquivos da pasta Account para o projeto MvcMusicStore;

Obs: Verifique se é necessário alterar namespace para as classes Controller e Model de forma para que elas
começem com namespace
MvcMusicStore. A classe AccountController deve usar o namespace
MvcMusicStore.Controllers , e a classe AccountModels deve usar o namespace MvcMusicStore.Models

Além disso os arquivos da pasta /Views/Account devem ter o a referência alterada de MvcApplication1 para MvcMusicStore;

Após encerrar a cópia dos arquivos você pode fechar a aplicação TesteMVC.

Adicionando um usuário Administrativo

Vamos agora criar um usuário com perfil de administrador e restringir o acesso ao nosso controlador StoreManagerController somente aos usuários com perfil de administrador.

Abra o arquivo Web.Config na raiz da aplicação e altere o valor da propriedade connectionStringName para "MusicStoreEntities" para as seções indicadas a seguir:

<profile defaultProvider="DefaultProfileProvider">
<providers>
     <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="
MusicStoreEntities" applicationName="/" />
</providers>
</profile>

<membership defaultProvider="DefaultMembershipProvider">
<providers>
    <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="
MusicStoreEntities" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
</providers>
</membership>

<roleManager enabled="true" defaultProvider="DefaultRoleProvider">
<providers>
     <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="
MusicStoreEntities" applicationName="/" />
</providers>
</roleManager>

<sessionState mode="InProc" customProvider="DefaultSessionProvider">
<providers>
      <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="
MusicStoreEntities" />
</providers>
</sessionState>

A seguir abra o arquivo Global.asax e inclua o código conforme mostrado a seguir no método Application_Start():

Sub Application_Start()

Database.SetInitializer(New MvcMusicStore.Models.SampleData())
AreaRegistration.RegisterAllAreas()

RegisterGlobalFilters(GlobalFilters.Filters)
RegisterRoutes(RouteTable.Routes)

If Not Roles.RoleExists("Administrator") Then
    Roles.CreateRole("Administrator")
End If
If Membership.GetUser("Admin") Is Nothing Then
    Membership.CreateUser("Admin", "senha123$", "macoratti@yahoo.com")
    Roles.AddUserToRole("Admin", "Administrator")
End If
End Sub

O código acima cria um perfil chamado administrator e um usuário Admin com senha igual a "senha123$" e email macoratti@yahoo.com e adicionando o usuário ao perfil de administrador.

Após a execução deste código se olharmos na pasta App_Data o arquivo MvcMusicStore.sdf que é o nosso banco de dados veremos que foram criadas as tabelas : MemberShips, Profiles, Roles, Users e UsersInRoles que gerenciam as informações dos perfis e usuários e senhas.

Agora que já temos o perfil de administrador e o usuário criados vamos definir o código no controlador StoreManagerController para restringir o acesso as Views deste controlador somente aos usuários com perfil de administrador. Abra o arquivo StoreManagerController.vb e inclua a seguinte linha de código no início do arquivo:

Imports System.Data.Entity
Imports MvcMusicStore
Namespace MvcMusicStore

 <Authorize(Roles:="Administrator")> _
Public Class StoreManagerController
        Inherits System.Web.Mvc.Controller

        Private db As MusicStoreEntities = New MusicStoreEntities
        ...
...

A linha de código <Authorize(Roles:="Administrator")> _ usar o atributo <Authorize> para especificar que o usuário deve possuir o perfil de administrador para acessar qualquer Action do controlador na classe.

Execute o projeto e a seguir navegue para a URL /StoreManager :

O usuário será direcionando para a página de Login para se autenticado:

Informando o usuário Admin e a senha senha123$ o usuário terá acesso as views do controlado que implementam as funcionalidades CRUD;

Obs: No Visual Web Developer 2010 Express podemos usar a ferramenta ASP .NET Configuration para criar o perfil , o usuário e definir a senha.

No próximo tutorial vamos usa o implementar o carrinho de compras em nosso site: ASP .NET - MVC Music Store - Cesta de compras com atualizações Ajax

Referências:


José Carlos Macoratti