Fernando Amaral
MemberShip e Roles em ASP.NET. Algumas técnicas avançadas

MemberShip e Roles em ASP.NET. Algumas técnicas avançadas

Introdução

Este artigo apresenta algumas técnicas avançadas dos recursos de MemberShip e Roles disponíveis no ASP.NET 2.0. Se você ainda não tem conhecimento no assunto sugiro que primeiramente leia o artigo MemberShip e Roles que pode ser encontrado em meu site em www.fernandoamaral.com.br

O problema

Por padrão, o ASP.NET cria um banco de dados SQL Express de nome ASPNETDB.MDF em App_Data com todos os objetos necessário para a gerenciamento de memberships e roles. O cenário pode ser visualizado na figura 1:

Com certeza é uma alternativa prática, porém temos aqui alguns problemas:

  •  Seu site provavelmente vai ter um banco de dados de aplicação. Você terá então dois bancos de dados independentes para uma mesma aplicação!
  • Provavelmente alguma regra de negócio de seu aplicativo vai precisar interagir de alguma forma com a base de dados de membership e roles, como numa auditoria, por exemplo. Sua aplicação vai ter que buscar estar informações em outro banco de dados, em outro SGBD!
  • Por padrão o banco de dados de gerenciamento estará junto ao Servidor de Internet. Você pode querer colocá-lo em um servidor de banco de dados dedicado, ou mesmo sequer deseja instalar o SQL Server junto ao Servidor Web.
  • Um banco de dados SQL Server edição Express possui algumas limitações técnicas.

A boa noticia é que o ASP.NET permite que seja utilizado nosso próprio banco de dados para o gerenciamento de membership e roles, como exibido na figura 2. Fazer isso é simples, e basicamente deve ser feito em duas etapas:

1.   Criar os objetos necessários no seu banco de dados: O gerenciamento de memberships e roles é feito através de um conjunto especifico de tabelas, views e stored procedures, que deverão ser de alguma maneira criados no seu banco de dados.

2.   Configurar a sua aplicação para usar seu banco de dados: Devemos configurar a aplicação para que faça o gerenciamento de usuários e funções não mais através do banco de dados padrão, utilizando o nosso banco de dados ao invés disso.

Criando os Objetos

Você pode criar os objetos necessários diretamente no seu banco de dados ou então produzir um script DDL com os mesmos.

O .NET possui a Ferramenta ASP.NET SQL Server SetupWizard que pode ser utilizado tanto para criá-los ou mesmo para produzir o script.

Gerando os objetos diretamente no seu banco de dados

Para gerar o schema diretamente no seu banco de dados, basta rodar o aplicativo ASP.NET SQL Server SetupWizard (ASPNET_REGSQL), que pode ser encontrado no caminho C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 , ou executado mais facilmente através do Visual Studio 2005 Command Prompt que pode ser encontrado no conjunto de programas do Visual Studio. No prompt de comando basta digitar ASPNET_REGSQL.

A primeira tela do programa traz algumas informações sobre a criação dos objetos:

Na segunda etapa devemos informar se desejamos preparar nossa aplicação ou
remover as configurações, obviamente vamos optar pela primeira opção:

Em seguida devemos informar o servidor, o banco de dados e as informações de
login para a criação dos objetos:

Em seguida um sumário das configurações é exibido:

Por fim o aplicativo informa que os objetos foram criados:

Se examinarmos o banco de dados, podemos ver que foram criadas diversas
tabelas, procedures e views específicas para o uso do ASP.NET:

 

Gerando um Script

Além do wizard exibido anteriormente, através do mesmo aplicativo, porém através da linha de comando, podemos produzir um script DDL.

Se você for distribuir o banco de dados de sua aplicação através de um script, provavelmente você acharia ótimo incluir também o script para criação dos objetos de Membership e Roles. Podemos gerar o script para um arquivo, informando quais funcionalidades desejamos utilizar.

Por exemplo, para gerarmos um script com toda a funcionalidade para um arquivo de nome ASPScript.SQL, basta executar o seguinte comando:

ASPNET_REGSQL -sqlexportonly C:\ASPScrip.sql -A all

Será gerado o script no arquivo C:\ASPScrip.sql com todas as funcionalidades incluídas. Para mais opções digite o comando

ASPNET_REGSQL -?

Configurando sua aplicação

Criar os objetos necessários em seu banco de dados não é o suficiente. Se o ASP.NET não souber que você deseja que as funcionalidades de Membership e Roles sejam armazenadas em seu próprio banco de dados, ele vai continuar a usar o arquivo SQLExpress na pasta App_Data.

Tudo a fazer é incluir algumas entradas no arquivo web.config de sua aplicação

Acima configuramos as funcionalidades de MemberShip, observer o nó provider, o atributo name tem o valor de SqlProvider, type como System.Web.Security.SqlMembershipProvider. Outro atributo importante é ConnectionStringName, que deve apontar para um string de conexão no mesmo arquivo web.config contendo as informações do servidor e banco de dados onde deverá estar a estrutura de gerenciamento de membership. Para exemplificar, a string de conexão MinhaString poderia ser adiciona no web.config da seguinte forma:

<connectionStrings>

<add name="MinhaString" connectionString="Data Source=Servidor;Initial Catalog= AdventureWorks;User ID=sa;Password=123" providerName="System.Data.SqlClient"/>

</connectionStrings>

Para o gerenciamento de Roles devemos adicionar um nó roleManager, semelhante ao anterior:

<roleManager defaultProvider="SqlProvider" enabled="true" cacheRolesInCookie="true" cookieName=".ASPROLES" cookieTimeout="30" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All"> <providers>

<add name="SqlProvider"

type="System.Web.Security.SqlRoleProvider"

connectionStringName="MinhaString"

applicationName="MinhaAplicacao"/> </providers> </roleManager>

Observe novamente as informações de name do provedor, tipo e string de conexão.

Concluindo

Os recursos de membership e roles foram sem duvida uma grande novidade no ASP.NET 2.0. Poder direcionar suas funcionalidades para um banco de dados especifico torna este recurso ainda mais funcional e útil!

Últimos artigos relacionados:
Refatoração (Refactoring) em Visual Studio 2008
Medindo a Performance de seu Código com Visual Studio Team System 2008
Code Snippets no Visual Studio 2008
Análise de Código com Visual Studio Team System 2008
.NET independente de plataforma? Uma introdução ao Mono