Avançar para a área de conteúdo

ir para o conteúdo principal

developerWorks Brasil  >  Software livre  >

Crie Web sites rapidamente com CakePHP, Parte 2: Faça mais e melhor com CakePHP

developerWorks
Ir para a página anteriorPágina 8 de 14 Ir para a próxima página

Opções de documento

Código de amostra


Classificar este tutorial

Ajude-nos a melhorar este conteúdo


Colocando as ACLs para trabalhar

Você juntou todas as peças, e agora chegou a hora de colocar suas ACLs para trabalhar. Quando terminar, qualquer usuário terá permissão de ver os produtos no Tor, mas apenas os que os criaram poderão editá-los ou excluí-los.

Você vai acrescentar duas linhas a cada ação no controlador de produtos. Essas linhas vão verificar o acesso do usuário e permitir ou negar a ação com base nas permissões.

Permitindo que os usuários apenas vejam os produtos

Comece com a ação view. Acrescente uma linha para verificar o acesso ao produto, exibindo uma mensagem se a ação não for permitida.


Listagem 17. Acrescentando uma linha para verificar o acesso ao produto
                    
function view($id = null){
if (!$id) {
  $this->Session->setFlash('Invalid Product.', true));
  $this->redirect(array('action'=>'index'));
}
$product = $this->Product->read(null, $id);
$alias = $id . '-' . $product['Product']['title'];
if ($this->Acl->check($this->Session->read('user'), $alias;
			    $id . '-' . $product['Product']['title'], 'read')) {
$this->set('product', $product);
} else {
   $this->Session->setFlash('Only registered users may view this product.');
   $this->redirect(array('action'=>'index'));
       }
}
                

Salve o arquivo, confirme se foi feito o logout do Tor e acesse a lista de produtos em http://localhost/products. Quando clicar em um dos produtos, você deverá ser redirecionado para a página de Registro de Usuário, como mostrado abaixo.


Figura 12. Redirecionamento
Redirection

Agora, faça login usando qualquer conta e tente de novo. Desta vez, você deverá poder ver o produto, como se vê na Figura 13.


Figura 13. Vendo o produto
Viewing the product

Isso atende a primeira parte das permissões. Agora você precisa dizer ao Tor para negar acesso para editar e excluir a qualquer um, menos o usuário que criou o produto.



Voltar para parte superior


Permitindo que apenas o criador do produto o edite ou exclua

O processo para controlar permissões é bem semelhante às ações edit e delete no controlador de produtos.


Listagem 18. Ação edit
                    
    function edit($id = null) {
        if (!$id && empty($this->data)) {
            $this->Session->setFlash(__('Invalid Product', true));
            $this->redirect(array('action'=>'index'));
        }
        $product = $this->Product->read(null, $id);
        $alias = $id.'-'.$product['Product']['title'];
        if ($this->Acl->check($this->Session->read('user'),
$alias, 'update')) {
            if (!empty($this->data)) {
                if ($this->Product->save($this->data)) {
                    $this->Session->setFlash(__('The Product has been saved',
true));
                    $this->redirect(array('action'=>'index'));
                } else {
                    $this->Session->setFlash(__('The Product could not be saved.
Please, try again.', true));
                }
            }
            if (empty($this->data)) {
                $this->data = $this->Product->read(null, $id);
            }
        } else {
            $this->Session->setFlash('You cannot edit this product.');
            $this->redirect(array('action'=>'index'), null, true);
        }
        $dealers = $this->Product->Dealer->find('list');
        $this->set(compact('dealers'));
    }
 

Para o controlador de exclusão, você precisa acrescentar duas linhas para excluir o ACO do produto sendo excluído. Sua ação delete será semelhante à Listagem 19.


Listagem 19. Ação delete
                    
    function delete($id = null) {
        if (!$id) {
            $this->Session->setFlash(__('Invalid id for Product', true));
            $this->redirect(array('action'=>'index'));
        }
        $product = $this->Product->read(null, $id);
        $alias = $id.'-'.$product['Product']['title'];
        if ($this->Acl->check($this->Session->read('user'),
$alias, 'delete')) {
            if ($this->Product->del($id)) {
                $aco = $this->Acl->Aco->findByAlias($alias);
                $this->Acl->Aco->delete($aco['Aco']['id']);
                $this->Session->setFlash(__('Product deleted', true));
                $this->redirect(array('action'=>'index'));
            }
        } else {
            $this->Session->setFlash('You cannot delete this product.');
            $this->redirect(array('action'=>'index'));
        }
    }
                

Salve o controlador de produtos e faça um teste. Comece fazendo o logout de http://localhost/users/logout, depois volte à sua lista de produtos em http://localhost/products/ e tente editar ou excluir o produto. Você deve ser direcionado de volta à lista de produtos com uma mensagem.


Figura 14. Falha na edição ou exclusão
Failed edit or delete

Agora, faça o login como o usuário dentarthurdent e acrescente um produto. Tente editá-lo. Depois, exclua-o. Você não deve ter problemas para isso.


Figura 15. Edição ou exclusão bem-sucedida
Successful edit or delete

Faça o logout novamente de http://localhost/users/logout e o login como outro usuário. Daí, tente editar ou excluir outro produto, e você não deverá ser capaz de executar essas ações. Enquanto estiver logado, crie um novo produto e tente modificá-lo ou excluí-lo como outro usuário.



Voltar para parte superior



Ir para a página anteriorPágina 8 de 14 Ir para a próxima página