Skip to content

Commit

Permalink
Update auth.rst
Browse files Browse the repository at this point in the history
fixes and improvements in portuguese
  • Loading branch information
lerox committed Nov 2, 2013
1 parent 7e3b288 commit 647a5a0
Showing 1 changed file with 42 additions and 43 deletions.
85 changes: 42 additions & 43 deletions pt/tutorials-and-examples/blog-auth-example/auth.rst
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
Autenticação simples e Autorização da Aplicação
###############################################

Seguindo com nosso :doc:`/tutorials-and-examples/blog/blog` exemplo, imagine que
queremos fornececer acesso seguro as nossas urls, baseada em autenticação de usuário.
Nós também temos outro requisito, permitir que muitos autores possam
criar seus próprios posts, editar e deletar os post deles sem que afete o que os outros
autores fizeram em seus posts.
Seguindo com nosso exemplo do :doc:`/tutorials-and-examples/blog/blog`, imagine que
queremos fornececer acesso seguro às nossas urls, baseada em autenticação de usuário.
Nós também temos outro requisito, permitir que muitos autores possam criar seus próprios
posts, editar e deletar os post deles sem que afete o que os outros autores fizeram em seus posts.

Criando a tabela de usuários
============================

Primeiro, vamos criar uma nova tabela na nossa base de dados blog para armazenar os dados de usuários::
Primeiro, vamos criar uma nova tabela na nossa base de dados do blog para armazenar os dados de usuários::

CREATE TABLE users (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
Expand All @@ -23,8 +22,8 @@ Primeiro, vamos criar uma nova tabela na nossa base de dados blog para armazenar

Nós respeitamos as convenções do CakePHP para nomear tabelas, mas também
aproveitamos outra convenção: usando as colunas username e password em nossa
tabela users,o CakePHP será capaz de auto configurar as coisas quando implementarmos
o mecanismos de login de nossos usuários.
tabela users, o CakePHP será capaz de auto configurar as coisas quando implementarmos
os mecanismos de login de nossos usuários.

A próxima etapa é criar o nosso model User, responsável pelas pesquisas, gravações e
validações de dados dos usuários::
Expand Down Expand Up @@ -55,8 +54,8 @@ validações de dados dos usuários::
);
}

Vamos criar também nosso UsersController, o conteúdo a seguir corresponde a classe UsersController
básica `cozida` usando o ferramenta de geração de códigos presente no CakePHP::
Vamos criar também nosso UsersController, o conteúdo a seguir corresponde à classe UsersController
básica `cozida` usando a ferramenta de geração de códigos presente no CakePHP::

// app/Controller/UsersController.php
class UsersController extends AppController {
Expand Down Expand Up @@ -152,7 +151,7 @@ Autorização (login e logout)

Nós agora estamos prontos para adicionar a camada de autorização. No CakePHP isso é feito
pela :php:class:`AuthComponent`, uma classe responsável por solicitar login para certas ações,
manipulando sign-in e sign-out, e também autorizando usuários logados acessarem actions as quais
manipulando sign-in e sign-out, e também autorizando usuários logados a acessarem actions as quais
possuem permissão.

Para adicionar esse componente em sua aplicação abra seu arquivo ``app/Controller/AppController.php``
Expand Down Expand Up @@ -182,18 +181,18 @@ em nosso caso são ``/posts/`` e ``/`` respectivamente.

O que fizemos na função ``beforeFilter`` foi dizer ao AuthComponent para não
solicitar um login para todas as actions ``index`` e ``view``, em todos os controller. Nós queremos
queremos que nossos visitantes possam ler qualquer post sem precisar se registrar no site.
que nossos visitantes possam ler qualquer post sem precisar se registrar no site.

Agora, nós precisamos autorizar que novos usuários possam se registrar, salvando o nome de usuário e a senha deles,
e o mais importante encriptar a senha pra que ela não seja armazenada como texto plano em nosso banco de dados.
Vamos dizer ao AuthComponet para permitir usuários deslogados acessarem a função
Vamos dizer ao AuthComponet para permitir que usuários deslogados acessem a função
add e implementar a ação de login e logout::

// app/Controller/UsersController.php

public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('add'); // Letting users register themselves
$this->Auth->allow('add'); // Permitindo que os usuários se registrem
}

public function login() {
Expand Down Expand Up @@ -226,7 +225,7 @@ e adicione o seguinte::

// ...

Então, agora toda vez que um usuário for salvo, a senha será encriptada usando o hashing padrão disponibilizado pela
Então, agora toda vez que um usuário for salvo, a senha será encriptada usando o hashing padrão disponibilizado pela
classe AuthComponent. Está faltando somente um arquivo view para a função de login, Aqui está ele:

.. code-block:: php
Expand All @@ -246,19 +245,19 @@ classe AuthComponent. Está faltando somente um arquivo view para a função de
Você pode registrar um novo usuário acessando a url ``/users/add`` e autenticar com
as credenciais do usuário recém criado indo para a url ``/users/login``. Tente também
acessar qualquer outra url sem que a permisão tenha sido explicitada, como em ``/posts/add``,
você verá que a aplicação irá redireciona-lo automáticamente para pagina de login.
você verá que a aplicação irá redirecioná-lo automaticamente para a página de login.

E é isso! Parece simples demais para ser verdade. Vamos voltar um pouco para explicar o que
aconteceu. A função ``beforeFilter`` está falando para o AuthComponent não solicitar um
login para a ação ``add`` em adição as açẽos ``index`` e ``view``que foram
login para a ação ``add`` em adição as ações ``index`` e ``view`` que foram
prontamente autorizadas na função ``beforeFilter`` do AppController.

A ação de ``login`` chama a função ``$this->Auth->login()`` do AuthComponent,
e ele funciona sem qualquer configuração adicional por que seguimos das convenções
e ele funciona sem qualquer configuração adicional porque seguimos as convenções
mencionadas anteriormente. Isso é, temos um model User com uma coluna username e uma password,
e usa um form para postar os dados dos usuário para o controller. Essa função
e usamos um form para postar os dados do usuário para o controller. Essa função
retorna se o login foi bem sucedido ou não, e caso ela retorne sucesso, então nós redirecionamos
o usuário para a url que configuramos quando adicionamos o AuthComponent em nossa aplicação.
o usuário para a url que configuramos quando adicionamos o AuthComponent em nossa aplicação.

O logout funciona exatamente quando acessamos a url ``/users/logout`` e irá redirecionar
o usuário para a url configurada em logoutUrl anteriormente descrita. Essa url é acionada quando
Expand All @@ -269,7 +268,7 @@ Autorização (quem tem permissão de acessar o que)

Como afirmado anteriormente, nós estamos convertendo esse blog em uma ferramenta
multi usuário de autoria, e para fazer isso, nós precisamos modificar um pouco a tabela posts para adicionar
a referencia ao model User::
a referência ao model User::

ALTER TABLE posts ADD COLUMN user_id INT(11);

Expand All @@ -279,7 +278,7 @@ post criado::
// app/Controller/PostsController.php
public function add() {
if ($this->request->is('post')) {
$this->request->data['Post']['user_id'] = $this->Auth->user('id'); //Added this line
$this->request->data['Post']['user_id'] = $this->Auth->user('id'); // Adicionada essa linha
if ($this->Post->save($this->request->data)) {
$this->Session->setFlash('Your post has been saved.');
$this->redirect(array('action' => 'index'));
Expand All @@ -292,8 +291,8 @@ momento. Nós usamos esse metódo para adicionar a informação dentro de reques
ela seja salva.

Vamos garantir que nossa app evite que alguns autores editem ou apaguem posts de outros.
Uma regra basica para nossa aplicação é que usuários admin podem acessar qualquer url, enquanto usuários normais
(o papel author) pode somente acessar as actions permitidas.
Uma regra básica para nossa aplicação é que usuários admin possam acessar qualquer url, enquanto usuários normais
(o papel author) podem somente acessar as actions permitidas.
Abra novamente a classe AppController e adicione um pouco mais de opções para as configurações do Auth::

// app/Controller/AppController.php
Expand All @@ -309,29 +308,29 @@ Abra novamente a classe AppController e adicione um pouco mais de opções para

public function isAuthorized($user) {
if (isset($user['role']) && $user['role'] === 'admin') {
return true; //Admin pode acessar todas actions
return true; // Admin pode acessar todas actions
}
return false; // O resto não pode
return false; // Os outros usuários não podem
}

Nós acabamos de criar um mecanismo de autorização muito simples. Nesse caso os usuários
com papel ``admin`` irão poder acessar qualquer url no site quando estiverem logados,
com papel ``admin`` poderão acessar qualquer url no site quando estiverem logados,
mas o restante dos usuários (i.e o papel ``author``) não podem acessar qualquer coisa diferente
dos usuários não logado.
dos usuários não logados.

Isso não é exatamente o que nós queremos, por isso precisamos corrigir nosso metódo ``isAuthorized()``
para fornecer mais regras. Mas ao invés de fazer isso no AppController, vamos
delegar a cada controller suprir essas regras extras. As regras que adicionaremos para o
add de PostsController deve permitir ao autores criaresmo post mas evitar a
edição de posts se não corresponde. Abra o arquivo ``PostsController.php``
delegar a cada controller para suprir essas regras extras. As regras que adicionaremos para o
add de PostsController deve permitir ao autores criarem os posts mas evitar a
edição de posts que não sejam deles. Abra o arquivo ``PostsController.php``
e adicione o seguinte conteúdo::

// app/Controller/PostsController.php

public function isAuthorized($user) {
if (!parent::isAuthorized($user)) {
if ($this->action === 'add') {
// All registered users can add posts
// Todos os usuários registrados podem criar posts
return true;
}
if (in_array($this->action, array('edit', 'delete'))) {
Expand All @@ -342,13 +341,13 @@ e adicione o seguinte conteúdo::
return false;
}

Nós estamos sobreescrevendo a chamada do ``isAuthorized()`` do AppController e internamente
verificando se na classe pai já é usuário autoriado. Se ele não for,
então só lhe permite acesso a ação add, e condicionamente acesso as ações
edit e delete. A última coisa que falta implementar, é dizer se usuário é
autorizado a editar ou post ou não, nós estamos chamando a função ``isOwnedBy()``
no model Post. Isso normamlmente é uma boa prática para mover tanta lógica quanto possivél
para dentro dos models. Vamos então implementar essa função::
Nós estamos sobreescrevendo a chamada do ``isAuthorized()`` do AppController e internamente
verificando na classe pai se o usuário está autorizado. Caso ele não esteja,
permitiremos acesso à ação add, e condicionamente acesso às ações
edit e delete. A última coisa que falta implementar, é dizer se usuário é
autorizado a editar o post ou não, nós estamos chamando a função ``isOwnedBy()``
no model Post. Mover lógica para dentro dos models normalmente é uma boa prática. Vamos
então implementar essa função::

// app/Model/Post.php

Expand All @@ -359,11 +358,11 @@ para dentro dos models. Vamos então implementar essa função::

Isso conclui então nossa autorização simples e nosso tutorial de autorização. Para garantir
o UsersController você pode seguir as mesmas técnicas que usamos para PostsController,
você também pode ser mais criativo e codificar algumas coisa mais geral no AppController
para suas próprias regras baseadas em papeis.
você também pode ser mais criativo e codificar algumas coisas mais gerais no AppController
para suas próprias regras baseadas em papéis.

Se precisar de mais controle, nós sugerimos você ler o guia completo do Auth
:doc:`/core-libraries/components/authentication` secão onde você encontrará mais
Se precisar de mais controle, nós sugerimos que leia o guia completo do Auth
:doc:`/core-libraries/components/authentication` seção onde você encontrará mais
sobre a configuração do componente, criação de classes de Autorização customizadas, e muito mais.

Sugerimos as seguintes leituras
Expand Down

0 comments on commit 647a5a0

Please sign in to comment.