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