<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>es-se &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://wordpress.com/tag/es-se/</link>
	<description>Feed of posts on WordPress.com tagged "es-se"</description>
	<pubDate>Sat, 06 Sep 2008 16:11:40 +0000</pubDate>

	<generator>http://wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[It is a pleasure to inform you that your paper submitted to WER 2008 has been ACCEPTED.]]></title>
<link>http://marcelioleal.wordpress.com/?p=89</link>
<pubDate>Wed, 18 Jun 2008 20:05:22 +0000</pubDate>
<dc:creator>marcelioleal</dc:creator>
<guid>http://marcelioleal.wordpress.com/?p=89</guid>
<description><![CDATA[Depois de tempos sem postar por estar totalmente focado no mestrado e trabalho recebo uma boa mensag]]></description>
<content:encoded><![CDATA[<p>Depois de tempos sem postar por estar totalmente focado no <a href="http://www.ufpa.br/ppgcc/">mestrado</a> e trabalho recebo uma boa mensagem. :)</p>
<p>O nosso artigo (Meu, Mayara e <a href="http://www.ufpa.br/cdesouza/">Professor Cleidson</a>) passou no primeiro teste o <a href="http://wer.inf.puc-rio.br/">WER</a>(Workshop em Engenharia de Requisitos).</p>
<p>Title: Uma abordagem semi-automática para a manutenção de links de rastreabilidade</p>
<p>Em breve esse trabalho estará disponível para utilização nas empresas como software livre.</p>
<p><a href="http://www.paysandu.com.br/">Papão</a>!!!!</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Desenvolvimento de um sistema de autenticação simples e funcional em PHP]]></title>
<link>http://marcelioleal.wordpress.com/2007/11/17/desenvolvimento-de-um-sistema-de-autenticacao-simples-e-funcional-em-php/</link>
<pubDate>Sat, 17 Nov 2007 00:19:57 +0000</pubDate>
<dc:creator>marcelioleal</dc:creator>
<guid>http://marcelioleal.wordpress.com/2007/11/17/desenvolvimento-de-um-sistema-de-autenticacao-simples-e-funcional-em-php/</guid>
<description><![CDATA[Um sistema de autenticação é parte da maioria dos sistemas. Um desenvolvedor ou instituição dev]]></description>
<content:encoded><![CDATA[<p>Um sistema de autenticação é parte da maioria dos sistemas. Um desenvolvedor ou instituição deve ter pelo menos uma base para utilização de um sistema desta natureza para que não perca muito tempo neste requisito.</p>
<p>Este post/tutorial/artigo apresenta uma solução simples de sistema de autenticação desenvolvida em <a href="http://www.php.net">PHP</a>. Esta solução é interessante para sistemas pequenos ou soluções rápidas. Também é interessante para que iniciantes assimilem conceitos importantes sobre desenvolvimento de sistemas web e segurança.</p>
<p><!--more--></p>
<p><strong> 1. Os Requisitos do Sistema</strong></p>
<p>Segurança é um sub-sistema onde, geralmente, os erros custam são mais caros. Portanto, deve-se ter mais cuidado para se implementar corretamente todos seus requisitos.</p>
<p>Lista de Funcionalidades básicas</p>
<ul>
<li>Login - autênticação</li>
<li>Cadastro de Usuários</li>
<li>Reset de Senha</li>
<li>Controle de Acesso à páginas/funcionalidades</li>
</ul>
<p>Não iremos detalhar muitos cada um dos requisitos e iremos implementar o básico. O sistema pode ser evoluido muito ainda.</p>
<p><strong>2. Modelo de Dados</strong></p>
<p>O Modelo de Dados desenvolvido é muito simples, no decorrer do post vamos explicar como utilizá-lo de forma melhor.</p>
<p><img src="http://img116.imageshack.us/img116/9963/modelfn9.png" alt="" /><br />
<em>Figura 1 - Modelo de Dados. </em></p>
<p>Para baixar o modelo de dados desenvolvido no <a href="http://fabforce.net/dbdesigner4/">DBDesigner</a> é só clicar <a href="http://2.download-1.files-upload.com/50/2007/11/15/22-40/0/model.xml">aqui</a>.</p>
<p>As senhas serão armazenadas utilizando o algoritmo de encriptação <a href="http://pt.wikipedia.org/wiki/MD5">MD5</a>.</p>
<p><strong> 3. Projeto</strong></p>
<p>Vamos utilizar o <a href="http://codigolivre.org.br/projects/classgenerator/">Classgenerator</a>, <a href="http://www.lbd.dcc.ufmg.br:8080/colecoes/sbes/2001/020.pdf">gerador de artefatos</a>, para criar a base do projeto. O que envolve a arquitetura e código inicial.</p>
<p>Veja mais sobre o Classgenerator na <a title="Classgenerator" href="http://marcelioleal.wordpress.com/files/2007/11/app.pdf">Apresentação no FISL 2007.</a></p>
<p>A arquitetura utilizada é a apresentada na figura 2.</p>
<p><img src="http://img265.imageshack.us/img265/8876/arquiteturabas1el4.jpg" alt="" /></p>
<p><em>Figura 2 - Arquitetura do sistema gerado pelo Classgenerator.</em></p>
<p>Nesse artigo não irei entrar em maiores detalhes sobre o Classgenerator, mas qualquer dúvida estarei a disposição.</p>
<p><strong>4. Implementação</strong></p>
<p>Depois de gerar os artefatos pelo classgenerator, deve-se realizar o básico para a aplicação começar a rodar:</p>
<ul>
<li>Descompactar a biblioteca <a href="http://adodb.sourceforge.net/">ADOdb</a>. (fig. 3)</li>
<li>Configurar a classe Conexão(autenticacao/classes/class.Conexao.php). (fig. 4)</li>
<li> Configurar o diretório no arquivo templatHeaders (autenticacao/templates/templateHeaders.php). (fig. 5)</li>
</ul>
<p><img src="http://img257.imageshack.us/img257/6619/pastaclassesnb1.png" alt="" /></p>
<p><em>Figura 3 - Pasta classe e adodb.</em></p>
<p><img src="http://img115.imageshack.us/img115/8599/conexaoconfigurationzx4.png" alt="" /></p>
<p><em>Figura 4 - Classe Conexao - Configuração.</em></p>
<p><img src="http://img134.imageshack.us/img134/2324/templateconfigurationey7.png" alt="" /></p>
<p><em>Figura 5 - Configuração do templateHeaders.</em></p>
<p>Após as atividades básicas de configuração as tarefas serão :</p>
<ul>
<li>Desenvolver a tela de login.</li>
<li>Customizar o cadastro de usuário</li>
<li>Gerência de usuário.</li>
</ul>
<p>Existem outras atividades, mas o sistema final deste tutorial/post/artigo vai estar incompleto é só customizar para cada situação.</p>
<p>Não é o objetivo deste tutorial mostrar boas técnicas e bom gosto no layout. Realmente acho essa uma tarefa bem mais difícil. :)</p>
<p><strong>Tela de Login</strong></p>
<p>A tela de login é bastante simplificada conforme a figura 6.</p>
<p><img src="http://img401.imageshack.us/img401/3430/telaloginys8.png" alt="" /></p>
<p><em>Figura 6 - Tela de Login</em>.</p>
<p>O código HTML da tela de login é bastante simples e submete os dados para a mesma página "<strong>index.php</strong>" .</p>
<p><img src="http://img89.imageshack.us/img89/1993/codlogin1vh2.png" alt="" /></p>
<p>O código que processa a requisição é o seguinte:</p>
<p><img src="http://img522.imageshack.us/img522/1434/codloginra3.png" alt="" /></p>
<p>Incluimos a classe <em>FrontController</em> que inclui os métodos de login e de permissão de cada página. Na linha 7 verificamos se o valor do botão <em>btnLogin</em> foi submetido, posteriormente chamamos o método <em>login</em> passando o login e a senha digitada. Neste ponto seria seguro utilizar HTTPS para que os dados fossem enviados encriptados.</p>
<p>Abaixo o código do método <em>login</em> na classe <em>FrontController</em>.</p>
<p><img src="http://img104.imageshack.us/img104/667/metodologinel7.png" alt="" /></p>
<p>Na linha 25 chamamos o método <em>loginUser</em> da classe <em>Fachada</em>, que a interface única com o BD. Esse método recebe como parâmetros o login e a senha encriptada(utilizando o md5).  O método <em>Util::forString() </em>(método stático - para saber mais <a href="http://www.php.net/manual/pt_BR/keyword.paamayim-nekudotayim.php">clique aqui</a>)<em> </em>formata a string para formar o SQL.</p>
<p>Se o retorno do método <em>loginUser</em> for um objeto então os seguintes passos são executados:</p>
<ul>
<li>Atribuir o objeto para uma variável de sessão.</li>
<li>Redirecionar o usuário para a sua página home de acordo com o seu grupo de usuário.</li>
</ul>
<p>A classe <em>Constante</em> encapsula os valores fixos do <em>userGroup</em> e do nome da página home de cada usuário. Abaixo um techo com os dois principais métodos da classe.</p>
<p><img src="http://img260.imageshack.us/img260/1005/metodosconstatetz4.png" alt="" /></p>
<p>É muito interessante utilizar uma classe do estilo da <em>Constante</em> pois centraliza os valores constantes da aplicação, facilitando a evolução e manutenção.</p>
<p>Abaixo uma parte da classe <em>User</em>, que é uma classe básica(ou bean no Java). Tem apenas os métodos get, set e métodos afins.</p>
<p><img src="http://img105.imageshack.us/img105/1201/classuserqz3.png" alt="" /></p>
<p>O método <em>loginUser</em> na classe <em>Fachada</em> é simplesmente a chamada do mesmo método na classe <em>CadUser</em>. Realizando apenas a função de ser a interface única com o BD.</p>
<p><img src="http://img402.imageshack.us/img402/2644/metodologinfachadadg6.png" alt="" /></p>
<p>Na classe <em>CadUser</em> a implementação do método <em>loginUser</em> chama o método correspondente na classe <em>CadUserBD</em> e trata o seu retorno. Caso seja positivo, retorna um objeto do tipo <em>User</em>, caso não seja positivo o resultado retorna false.</p>
<p><img src="http://img88.imageshack.us/img88/9391/metodologincadim1.png" alt="" /></p>
<p>Na classe <em>CadUserBD</em> o SQL é montado e executado. O SQL verifica, além do login e da senha, o status do usuário. Depois de sua execução é retornado um registro da tabela user ou um registro vazio.</p>
<p><img src="http://img408.imageshack.us/img408/2176/metodologinbdfz2.png" alt="" /></p>
<p>Após o login, o usuário é redirecionado para sua página home correspondente. Abaixo o código da página home do administrador.</p>
<p><img src="http://img228.imageshack.us/img228/9529/homeaj8.png" alt="" /></p>
<p>A página é bastante simples também:</p>
<ul>
<li>Na linha 2 incluimos a classe FrontController, que faz a inclusão das demais classes que utilizaremos.</li>
<li>Na linha 3 iniciamos a sessão para que possamos utilizar os valores adicionados nela.</li>
<li>Na linha 5 instânciamos a classe FrontController.</li>
<li>Na linha 6 chamamos o método allowPage(), que permite ou não a visualização da página.</li>
</ul>
<p>Bastam esses passos para todas as páginas para se garantir que os usuários só acessarão as páginas que os mesmos têm permissão.</p>
<p>Abaixo o código do método allowPage.</p>
<p><img src="http://img249.imageshack.us/img249/3267/metodoallowqn1.png" alt="" /></p>
<p>A primeira verificação é se existe o usuário na sessão. Posteriormente é extraído a url e chamado o método allow da classe UserGroupPages. Este método retorna true se houver permissão para visualização pelo grupo do usuário.</p>
<p>Esta é apenas uma das maneiras mais simples de se realizar isso, dependendo dos requisitos do sistema ela deve ser evoluida.</p>
<p>Abaixo um trecho da classe UserGroupPages.</p>
<p><img src="http://img152.imageshack.us/img152/7818/usergrouppagespu2.png" alt="" /></p>
<p><strong>Refactoring</strong></p>
<p>Em muitos casos temos sistemas de autenticação muito falhos e incompletos. Nestes casos é indicao um refactoring no código para que todas as regras de permissão sejam obedecidas.</p>
<p>É muito interessante utilizar uma abordagem como essa pois o método chamado na FrontController  não possui parâmetros diferentes para cada página, tornando mais fácil essa modificação em todas as página.</p>
<p>Indico a construção de um software que insira as linhas de 2 à 6 da página homeAdm(home do Administrador) como as primeiras linhas de cada página com acesso restrito e que sejam definidas as regras na classe UserGroupPages.</p>
<p><strong>Conclusão</strong></p>
<p>É realmente simples desenvolver uma aplicação reutilizável para controle de acesso e autênticação em PHP. Recomendo que seja dedicado um pouco mais de tempo para esta função com o objetivo de se fazer um sistema reutilizável.</p>
<p>Existem outras arquiteturas e implementações para estes tipos de sistema. O objetivo foi mostrar como funciona basicamente esta tarefa.</p>
<p>Este código executa em PHP 4 e 5. E segue a orientação a objetos do PHP 4. Não há muita diferença para implementações que seguem o PHP 5. Em termos funcionais é bem pequena a diferença.</p>
<p><strong>Arquivos</strong></p>
<p>Para baixar os arquivos do exemplo clique abaixo:</p>
<ul>
<li><a href="http://rapidshare.com/files/112002880/autenticacao.zip.html">Sistema.</a></li>
<li><a href="http://rapidshare.com/files/112003290/doc.zip.html">SQL e Banco.</a></li>
</ul>
<p><strong>Dúvida, Sugestões e Correções</strong></p>
<p>Mail-me marcelio [at] gmail [ponto] com</p>
<p><strong>Outros artigos </strong></p>
<p><a href="http://maozinhadaweb.blogspot.com/2007/06/sistema-de-login-com-php-orientado.html">Sistema de Login com PHP orientado a objetos</a> - Bruno Nunes</p>
]]></content:encoded>
</item>

</channel>
</rss>
