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 6 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


Definindo ACOs

Agora que o Tor está com os AROs definidos, é hora de identificar e definir seu ACO. Neste caso, você vai definir ACOs para representar produtos, organizando-os em grupos como fez com os AROs.

Acrescentando a definição de ACO ao controlador de produtos

Você vai acrescentar a definição inicial de ACO ao controlador de produtos na função add, de modo similar ao que fez com a definição do ARO no registro de usuário. No momento, a função add é exatamente o que o Bake lhe forneceu. Deve ser algo parecido à Listagem 13.


Listagem 13. Função add
                   
       function add() {
if (!empty($this->data))
{ $this->cleanUpFields();
$this->Product->create();
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));
}
}
$dealers = $this->Product->Dealer->find('list');
$this->set(compact('dealers'));
}

Novamente, o CakePHP simplifica muito o acréscimo da definição aos seus ACOs. Você começa acrescentando a variável de classe $components ao controlador, como fez para o controlador de usuários.


Listagem 14. Acrescentando a variável de classe $components ao controlador
                    
<?php
class ProductsController extends AppController
{
  var $components = array('Acl');
  ...

Criar um ACO é quase idêntico a criar um ARO. Você chama o método create no objeto de ACL ACO. Desta vez, o alias precisa ser mais do que apenas o título do produto, visto que ele talvez não seja único. Em vez disso, use uma combinação de identificação e título de produto para o alias. O modelo será o Produto, o foreign_key será a nova identificação do produto e o parent_id será a identificação do vendedor que inseriu o produto (você ainda não configurou isso, mas vai fazê-lo em breve). Colocando esses pedaços na sua função add, deve parecer à Listagem 15.


Listagem 15. Nova função add
                    
function add() {
if (!empty($this->data)) {
$this->cleanUpFields();
$this->Product->create();
if ($this->Product->save($this->data)) {
$dealer = $this->Product->Dealer->read(null,
     $this->data['Product']['dealer_id']);
$parent = $this->Acl->Aco->findByAlias($dealer
								    ['Dealer']['title']);
$this->Acl->Aco->create(array(
'alias' =>
		 $this->Product->id.'-'.$this->data['Product']['title'],
'model' => 'Product',
'foreign_key' => $this->Product->id,
'parent_id' => $parent['Aco']['id'])
);
$this->Acl->Aco->save();
$this->Session->setFlash('The Product
      has been saved');
$this->redirect(array('action'=>'index'),
      null, true);
} else {
$this->Session->setFlash('The Product could not
      be saved. Please, try again.');
}
}
$dealers = $this->Product->Dealer->generateList();
$this->set(compact('dealers'));
}
                

Isso deve ser tudo o que é necessário para criar automaticamente os ACOs para os produtos criados no Tor. Antes de continuar, você deve criar ACOs para os produtos e grupos existentes.



Voltar para parte superior


Acrescentando definições de ACO para os vendedores

Pode-se usar o Cake Console parta definir ACOs mais ou menos da mesma maneira em que foi usado para definir os AROs para os usuários existentes. Será útil usar a lista de produtos que o CakePHP preparou para você em http://localhost/products.

Mais uma vez, na linha de comando, no diretório /webroot/app, você vai executar alguns comandos create. Comece criando grupos para representar os vendedores que você criou lá atrás, ao criar a tabela de vendedores. Mas desta vez, especifique que está criando um ACO.

../cake/console/cake acl create aco root "Tor Johnson School Of Drama"

../cake/console/cake acl create aco root "Chriswell's Psychic Friends"
                

Você pode executar ../cake/console/cake acl view aco para verificar se os grupos têm a aparência esperada.


Figura 11. Dump de ACO com vendedores sem produtos
ACO dump with dealers no products

A seguir, exclua os produtos existentes da tabela de produtos. Você deve poder fazer isso indo até o índice de produtos (http://localhost/products/index) e clicando em Excluir ao lado de cada produto.

Visto que você só criou uns dois produtos até agora, recriá-los é o caminho mais curto para acrescentar os ACOs que deseja. Ainda não teste aquela função de novo produto add. Agora que os ACOs estão criados para os vendedores existentes e que você excluiu os produtos existentes, você está pronto para continuar a configurar algumas permissões.



Voltar para parte superior



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