<?xml version="1.0" encoding="UTF-8"?>
<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/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Technócil &#187; cakephp</title>
	<atom:link href="http://technocil.com/tag/cakephp/feed/" rel="self" type="application/rss+xml" />
	<link>http://technocil.com</link>
	<description></description>
	<lastBuildDate>Tue, 24 Aug 2010 21:24:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Introdução ao ACL do CakePHP</title>
		<link>http://technocil.com/2010/04/20/introducao-ao-acl-do-cakephp/</link>
		<comments>http://technocil.com/2010/04/20/introducao-ao-acl-do-cakephp/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 22:15:05 +0000</pubDate>
		<dc:creator>Tobias</dc:creator>
				<category><![CDATA[Desenvolvimento web]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[frameworks]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ACL]]></category>
		<category><![CDATA[ACO]]></category>
		<category><![CDATA[ARO]]></category>
		<category><![CDATA[controle de acesso]]></category>

		<guid isPermaLink="false">http://technocil.com/?p=343</guid>
		<description><![CDATA[E ae blz?
Novamente, como sempre, igual todas vezes anteriores, mais um post meu saiu de uma conversa que tive no gtalk/msn com alguém, dessa vez foi uma sugestão do João que escreve aqui no technócil comigo, falar sobre o Access Control Lists do CakePHP.
Então vamo lá, 
Eu comecei esse post planejando falar sobre ACL num [...]]]></description>
			<content:encoded><![CDATA[<p>E ae blz?</p>
<p>Novamente, como sempre, igual todas vezes anteriores, mais um post meu saiu de uma conversa que tive no gtalk/msn com alguém, dessa vez foi uma sugestão do <a href="http://www.joaovagner.com.br/">João</a> que escreve aqui no technócil comigo, falar sobre o <strong><a href="http://book.cakephp.org/view/171/Access-Control-Lists">Access Control Lists</a></strong> do <strong><a href="http://cakephp.org/">CakePHP</a></strong>.</p>
<p>Então vamo lá, </p>
<p>Eu comecei esse post planejando falar sobre ACL num post só, mas vi que seria impossível por que o post ia ficar imenso e no final dele você já teria esquecido o começo então resolvi separar o post em partes.</p>
<p>&#8211;Introdução ao ACL do CakePHP<br />
&#8211;ACL na prática, controla os acesso tudo amigo!&#8230; (hehe o final é título provisório, to criativo hoje)</p>
<p>O objetivo deste post é só introduzir <del datetime="2010-04-20T21:12:57+00:00">huhuhu!</del> os programadores aos conceitos do ACL, <del datetime="2010-04-20T21:12:57+00:00">até por que postar tudo deixaria o post grande pra c@#%&#038;*#, etc, etc&#8230;</del> que são na verdade o mais complicado de se entender, depois que os conceitos já estão, digamos, entendidos, a implementação é bem mais rápida&#8230;</p>
<p>O Access Control Lists, <strong>O mano ACL</strong> para os íntimos, <strong>é um componente que faz parte do core do framework CakePHP</strong>, e tem por finalidade <strong>oferecer uma forma poderosa de controle e níveis de acesso</strong> a determinadas áreas das aplicações. </p>
<p>Uma coisa <strong>muito importante que confunde muito</strong> quem está estudando o ACL pela primeira vez é, <strong>o ACL não faz autenticação ele só facilita a gerência dos níveis, usuários e áreas de acesso</strong>.</p>
<p><strong>Resumindo, o que ele faz é dizer quem pode acessar o que, e só. </strong></p>
<p>O ACL usa dois tipos de definições como convenção para facilitar o controle de acesso, são elas:</p>
<p><strong>ACO</strong> = Access Control Object, algo que é acessado.</p>
<p><strong>ARO</strong> = Access Request Object, quem ou o que acessa algo.</p>
<p>Fazendo uma analogia ao modelo que é geralmente usado pela grande maioria dos programadores, um exemplo de como seriam identificados os controles e níveis de acesso do blog usando ACL, você teria o seguinte cenário.</p>
<p><strong>AROs &#8211; Tipos/Grupos de usuários, usuários</strong><br />
Tipos de Usuários:<br />
&#8211;Admin<br />
&#8211;Editors<br />
&#8211;Guest</p>
<p>Usuários:<br />
&#8211;Tobias<br />
&#8211;João Vagner<br />
&#8211;Editor<br />
&#8211;Visitante</p>
<p><strong>ACOs &#8211; Áreas protegidas</strong><br />
&#8211;Posts<br />
&#8211;Páginas<br />
&#8211;Links<br />
&#8211;Plug-ins<br />
&#8211;Ferramentas<br />
&#8211;Usuários<br />
&#8211;Configurações</p>
<p>O ACL tem uma estrutura do tipo árvore e que pode aceitar heranças de permissões de acesso.</p>
<p>Seguindo o exemplo acima poderia ter uma árvore de permissões da seguinte maneira.<br />
<code><br />
Admins (permissões de acesso: todas as áreas)<br />
--João Vagner (herda todas as permissões do grupo)<br />
--Tobias (herda todas as permissões do grupo)</p>
<p>Editors ( permissões de acesso: ( posts (read,add,edit) )<br />
--editor (herda permissões do grupo, usuários (edit:id = editor.id)) </p>
<p>Guest (posts,pages,links(read))<br />
--visitante(herda permissões)<br />
</code></p>
<p>WTF? É o que você que nunca mexeu com ACL deve estar no momento né? Relaxa vou explicar o que eu quis dizer com o texto em negrito acima.</p>
<p>Do ponto de vista do ACL tanto os <strong>grupos de usuário</strong>, quanto os <strong>usuários</strong> são coisas do mesmo tipo,  <strong>são coisas que acessam coisas</strong>, e graças a metodologia de árvore essas coisas <strong>podem herdar</strong> permissões de acesso.</p>
<p>No caso do primeiro grupo, Admins, não há nada de especial ou misterioso, o grupo admin tem acesso a tudo e todos os usuários pertencentes a esse grupo herda suas permissões, moleza se você precisa de um controle de acesso simples assim você nem precisa de ACL.</p>
<p>Vamos ao segundo exemplo, esse sim tem algo de interessante e pra alguns pode ter sido meio confuso.</p>
<p><code>Editors ( permissões de acesso: ( posts (read,add,edit) )</code><br />
Traduzindo: O grupo Editors tem acesso ao controle posts e tem permissões para efetuar read, add, edit.</p>
<p>O que são essas permissões de read, add, edit? São permissões que você define de acordo com a sua necessidade, eu usei essas por que são as mais básicas, quase um default para exemplos.</p>
<p>Continuando&#8230;<br />
<code>--editor (herda permissões do grupo, usuários (edit:id = editor.id))</code><br />
Traduzindo: O usuário (ARO) editor <strong>herda as permissões</strong> do grupo editors e tem a permissão específica de edit a determinada id do controllers usuários, o que significa que <strong>ele pode editar as próprias informações de usuário, mas não pode editar os dados de outros usuários</strong>.</p>
<p><code>Guest (posts,pages,links(read))<br />
--visitante(herda permissões)</code><br />
E para todos os visitantes a permissão de ler posts, pages e links.</p>
<p>Como o objetivo desse post é fazer os conceitos serem entendidos não vou postar códigos eles ficam pro próximo post, bom feriado pra todos, e novamente, como sempre, igual a todas as vezes, dúvidas, sugestões e puxões de orelha os comentários tão ai pra isso.</p>
<p>flw ae :)</p>
]]></content:encoded>
			<wfw:commentRss>http://technocil.com/2010/04/20/introducao-ao-acl-do-cakephp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Encontro de desenvolvedores CAKE Sao Paulo</title>
		<link>http://technocil.com/2009/06/17/encontro-de-desenvolvedores-cake-sao-paulo/</link>
		<comments>http://technocil.com/2009/06/17/encontro-de-desenvolvedores-cake-sao-paulo/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 20:53:30 +0000</pubDate>
		<dc:creator>João Vagner</dc:creator>
				<category><![CDATA[Desenvolvimento web]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[frameworks]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://technocil.com/?p=321</guid>
		<description><![CDATA[Bom dia pessoal, 
Estive presente no Encontro de desenvolvedores CAKE em Sao Paulo, e posso dizer que foi um bom encontro, palestras de nivel muito bom, aonde foi abordado desde a criação de um helper ate a criação, plugins, ambiente de testes, brincadeiras e criação com o bake. 
Algumas palestras em destaques para  TDD [...]]]></description>
			<content:encoded><![CDATA[<p>Bom dia pessoal, </p>
<p>Estive presente no Encontro de desenvolvedores CAKE em Sao Paulo, e posso dizer que foi um bom encontro, palestras de nivel muito bom, aonde foi abordado desde a criação de um helper ate a criação, plugins, ambiente de testes, brincadeiras e criação com o bake. </p>
<p>Algumas palestras em destaques para  TDD &#8211; Test-Driven Development e Testes Automatizados com CakePHP, aonde foram abordados assuntos que vem ja a algum tempo sendo levado em conta que e desde a engenharia de software ate a cobertura de testes dos codigos. Abordados tipos de testes: Unitarios, Aceitação, entre outros.  Palestras de <a href="http://blog.rodrigorm.com.br/">Rodrigo Moyle</a> e José Pedrini. </p>
<p>Apos isso uma outra palestra de nivel incrivel sobre criação e consumo de webservices com CAKEPHP que foi criado e desenvolvido um webservive utilizando REST. Parabéns ao Carlos Pires da <a href="http://2km.com.br/">2KM</a> que veio de Minas para nos prestegiar com sua palestra e sua participação no evento.</p>
<p>Um grade destaque também a palestra do Rafael Santos, que nos mostrou como construir uma plataforma RAD para Flex com CakePHP e Fake, apresentando inovações como o FAKE e integrações bem legais entre Flex e CAKEPHP, aonde se utiliza todos os recursos, desde validations, ate os models e controllers, nao deixando a desejar nem um pouco. </p>
<p>Parabéns aos Organizadores, ao Renan Gonçalves que se esforçou e fez acontecer e valer a pena o evento. Troca de conhecimentose fortalecimento da comunidade CAKEPHP e PHP no Brasil e em São Paulo.</p>
<p><strong>Minha Palestra:<br />
</strong></p>
<div style="width:425px;text-align:left" id="__ss_1599402"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/JoaoVagner/slide-cake-sp?type=powerpoint" title="Criando e Usando Helpers">Criando e Usando Helpers</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=slidecakesp-090617150924-phpapp02&#038;rel=0&#038;stripped_title=slide-cake-sp" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=slidecakesp-090617150924-phpapp02&#038;rel=0&#038;stripped_title=slide-cake-sp" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">PDF documents</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/JoaoVagner">JoaoVagner</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://technocil.com/2009/06/17/encontro-de-desenvolvedores-cake-sao-paulo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bloqueio de rota administrativa do CakePHP</title>
		<link>http://technocil.com/2009/03/12/bloqueio-de-rota-administrativa-do-cakephp/</link>
		<comments>http://technocil.com/2009/03/12/bloqueio-de-rota-administrativa-do-cakephp/#comments</comments>
		<pubDate>Thu, 12 Mar 2009 23:34:56 +0000</pubDate>
		<dc:creator>João Vagner</dc:creator>
				<category><![CDATA[Destaques]]></category>
		<category><![CDATA[Geral]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[OOP]]></category>
		<category><![CDATA[frameworks]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[Desenvolvimento web]]></category>

		<guid isPermaLink="false">http://technocil.com/?p=210</guid>
		<description><![CDATA[Olá Pessoal,
Quem utiliza o Fremwork CakePHP sabe que é uma mão na roda o route admin. Nos poupa um bocado de trabalho criar as funções da administração do site. Isso graças ao &#8220;Bake&#8221; Porém a rota não pode ficar totalmente acessivel a qualquer um, certo? 
O Jonathan Snook  escreveu um artigo em relação a [...]]]></description>
			<content:encoded><![CDATA[<p>Olá Pessoal,</p>
<p>Quem utiliza o Fremwork CakePHP sabe que é uma mão na roda o route admin. Nos poupa um bocado de trabalho criar as funções da administração do site. Isso graças ao &#8220;Bake&#8221; Porém a rota não pode ficar totalmente acessivel a qualquer um, certo? </p>
<p>O <em>Jonathan Snook </em> escreveu um artigo em relação a isso, porém em alguns testes por aqui nenhum realmente funcionou utilizando .htaccess para proteção dessa rota com password.</p>
<p><a href="http://snook.ca/archives/servers/password_protect_admin/">Password Protecting Admin Functions in CakePHP</a>.</p>
<p>O Conceito da proteção no artigo do <em>Jonathan Snook </em> é simples, E pode ser gerado com qualquer um que possua acesso ao SSH do site. Não é necessário acesso root para esses tipos de ações no servidor.<br />
Seu servidor não te da acesso ao SSH? Está na hora de mudar para a <a href="http://www.iw2servers.com.br"><strong>IW²</strong></a></p>
<p>O primeiro passo dessa proteção se dá ao inserir seguinte conteúdo no seu <strong>.htaccess</strong> :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">AuthUserFile <span style="color: #339933;">/</span>diretorio<span style="color: #339933;">/</span>passwd<span style="color: #339933;">/</span>protecao
AuthName <span style="color: #0000ff;">&quot;Administracao CAKE&quot;</span>
AuthType Basic
<span style="color: #b1b100;">Require</span> valid<span style="color: #339933;">-</span>user</pre></td></tr></table></div>

<p>Com acesso ao ssh utilize o seguinte comando dentro da pasta &#8220;www&#8221;.</p>
<blockquote><p>htpasswd -c /diretorio/passwd/protecao username</p></blockquote>
<p>.<br />
Isso gera um arquivo com a senha criptografada! Caso queira barar o arquivo gerado para verificar fiquem à vontade!</p>
<p>Bons testes, aqui nunca funcionou!</p>
<h3>Meu jeitinho</h3>
<p>A maneira no qual eu utilizo é a verificação simples de variavel, ou seja, apenas um usuário dentro do código no qual após o POST, verifica os dados, e grava uma sessão, se os mesmos forem iguais.</p>
<p>Primeiro passo é abrir o seu <strong>/app/config/routes.php</strong>, e crie uma rota chamada <strong>admin</strong>, usando o controller de páginas estáticas. Veja:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">Router<span style="color: #339933;">::</span><span style="color: #004000;">connect</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/admin/'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'controller'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'pages'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'action'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'display'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'admin'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Agora crie um arquivo chamado <strong>admin.ctp</strong> dentro da pasta /app/views/pages/ com um formulário básico para login e senha:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>  
<span style="color: #666666; font-style: italic;">//Define o layout padrão para a página</span>
<span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">layout</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'admin'</span><span style="color: #339933;">;</span> 
<span style="color: #000000; font-weight: bold;">?&gt;</span>
&lt;h1&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> __<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Administração'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/h1&gt;
<span style="color: #000000; font-weight: bold;">&lt;?php</span>   
<span style="color: #666666; font-style: italic;">// Caso ocorra algum erro, é exibido em sua div correta!</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$error</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>   
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;&lt;div class='error'&gt;&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$error</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;&lt;/div&gt;&quot;</span><span style="color: #339933;">;</span>   
<span style="color: #009900;">&#125;</span>   
<span style="color: #000000; font-weight: bold;">?&gt;</span>   
<span style="color: #000000; font-weight: bold;">&lt;?php</span> 
<span style="color: #666666; font-style: italic;">/*
criamos um formulário com o vetor User, indicando a rota /admin/login, onde teremos nossa verificação de usuário e senha para registro da sessão da administração, e acesso ao restante dos actions _admin_
*/</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$form</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">create</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'User'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'url'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'/admin/login/'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span>   
&lt;fieldset&gt;
    &lt;legend&gt;Digite os dados&lt;/legend&gt;   
        <span style="color: #000000; font-weight: bold;">&lt;?php</span>  <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$form</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">input</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'username'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'label'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Login'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
        <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$form</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">input</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'password'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'label'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Senha'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'id'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Senha'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>   
  <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$form</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">end</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Logar!'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>   
   &lt;/fieldset&gt;
&lt;/form&gt;</pre></td></tr></table></div>

<p>O próximo passo é criar uma nova rota no <strong> /app/config/routes.php</strong>, rota no qual foi definida na URL do nosso formulário, onde será submetida os dados para verificação.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">Router<span style="color: #339933;">::</span><span style="color: #004000;">connect</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/admin/login/'</span><span style="color: #339933;">,</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'controller'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'users'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'action'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'admLogin'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Claro, obviamente eu já possuo um controller chamado users, caso não tenha, pode cria-lo, utilizando o código abaixo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> UsersController <span style="color: #000000; font-weight: bold;">extends</span> AppController <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$name</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Users'</span><span style="color: #339933;">;</span>
	<span style="color: #000000; font-weight: bold;">var</span> <span style="color: #000088;">$helpers</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Html'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Form'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">/*
Claro, que aqui irão outras actions suas ;)
*/</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">function</span> admLogin<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>   
	    <span style="color: #666666; font-style: italic;">//verifica se o post possui alguma informação para registrar o nosso array com informações</span>
	    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">data</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>   
                <span style="color: #000088;">$dbuser</span>	<span style="color: #339933;">=</span>       <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'username'</span><span style="color: #339933;">==</span><span style="color: #0000ff;">'Administrador'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'password'</span><span style="color: #339933;">=&gt;</span><span style="color: #0000ff;">'Sua_senha_aqui'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	           <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'User'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'username'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$dbuser</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'username'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;&amp;</span> 
                         <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'User'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'password'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$dbuser</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'password'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>  <span style="color: #009900;">&#123;</span>   
                                 <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Session</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Write</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'admin'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$dbuser</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
                                 <span style="color: #666666; font-style: italic;">// registra a sessão &quot;admin&quot; para futuras verificações</span>
                                 <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Session</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setFlash</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Logado com sucesso'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
                                 <span style="color: #666666; font-style: italic;">//Notifica o sucesso ao logar!</span>
                                 <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">redirect</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/admin/users/index'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
                                 <span style="color: #666666; font-style: italic;">// redireciona para a action index do controller users.</span>
	        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>   
	              <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Session</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setFlash</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Erro! Dados inválidos'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                          <span style="color: #666666; font-style: italic;">// notifica o erro    </span>
	        <span style="color: #009900;">&#125;</span>   
	    <span style="color: #009900;">&#125;</span>   
	<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Note que por enquanto o nosso controller users possui apenas um action. Fica a seu critério a criação do resto do conteúdo ;) </p>
<p>Agora iremos criar a função para verificação da sessão:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
	<span style="color: #000000; font-weight: bold;">function</span> checkAdminSession<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>   
               <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Session</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">check</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'admin'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>   
               <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Session</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setFlash</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Você não tem acesso a essa área'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
               <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">redirect</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/admin/login/'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #009900;">&#125;</span>   
<span style="color: #009900;">&#125;</span>   
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>A minha recomendação é que coloque essa função dentro do arquivo <strong>/app/app_controller.php</strong> no qual o cake carrega automáticamente. Esse arquivo serve para colocar as funções que vai utilizar em todos os controllers, sem a necessidade de ficar repetindo os mesmos.</p>
<p>Agora vem a parte mais interessante, vamos inserir o beforeFilter(); também dentro do <strong>/app/app_controller.php</strong>, para verificação do parametro /admin/ na url, e execução da verificação da sessão. Veja:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> beforeFilter<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>   
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">isset</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">params</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'admin'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>   
           <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">checkAdminSession</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
    <span style="color: #009900;">&#125;</span>   
 <span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p><strong>O que a função faz é:</strong> Se existe algum parametro na url &#8220;admin&#8221;, executa a função checkAdminSession e veja se existe a sessão &#8220;admin&#8221;. Se não existir a sessão, a checkAdminSession redireciona para login. </p>
<p>Pronto, e assim você tem uma certa segurança em relação a rota /admin/ não estar sendo visualizada por tudo e por todos! </p>
]]></content:encoded>
			<wfw:commentRss>http://technocil.com/2009/03/12/bloqueio-de-rota-administrativa-do-cakephp/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
