 | Atribuindo permissões
Agora, o Tor tem vários AROs que representam usuários, e o palco está
montado para criar alguns ACOs que representem produtos, agrupados por
vendedor. É hora de reuni-los definindo algumas permissões.
Como as permissões
funcionam?
Você vai definir especificamente quem tem direito de trabalhar com os
produtos. Fará isso permitindo explicitamente plenos direitos a um
ARO (neste caso, um usuário) sobre um ACO (neste caso, um produto)
e sobre uma ação. As ações poderão ser ler (ou seja, o usuário poderá
ver as informações no banco de dados), criar (o usuário poderá inserir
informações no banco de dados), atualizar (o usuário poderá modificar
informações), excluir (o usuário poderá excluir informações do banco
de dados) ou *, o que significa que o usuário poderá executar todas
as ações. Cada ação deve ser concedida individualmente; permitir excluir não implica em permitir criar, nem mesmo ver.
Por padrão, depois de verificar permissões para algo, se não houver
permissão definida, o CakePHP presume
DENY.
Definindo políticas
Definir políticas de permissão é mais do que apenas escrever e executar
código. Você precisa pensar no que seu ACL está realmente tentando
realizar. Sem uma ideia clara do que você está tentando proteger e
de quem, terá que redefinir constantemente suas permissões.
O Tor tem usuários e produtos. Para os fins deste tutorial, você vai
permitir que o usuário que criou o produto tenha permissão total de
editá-lo e excluí-lo. Qualquer usuário poderá ver o produto, a menos
que lhe seja negado acesso de forma explícita.
Acrescentando definição de
permissão ao produto add
O Tor precisa saber como atribuir permissões quando um produto é criado.
Isso pode ser feito acrescentando-se duas linhas ao controlador. Uma
acrescenta as permissões de visualização para os usuários e a outra,
permissões totais para o usuário que o criou. Conceder permissões é
algo assim:
$this->Acl->allow(ARO, ACO, TYPE);.
Se você não especificar TYPE
(create, read,
update ou
delete), o CakePHP vai presumir que
você está concedendo permissão total. Sua nova função add
no controlador de produtos deve ser semelhante à Listagem 16.
Listagem 16. Nova função add no controlador de produto
function add() {
if (!empty($this->data)) {
$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']);
$alias = $this->Product->id.'-'.$this->data
['Product']['title'];
$aco = new Aco();
$aco->create();
$aco->save(array(
'alias' => $alias,
'model' => 'Product',
'foreign_key' => $this->Product->id,
'parent_id' => $parent['Aco']['id']
));
$this->Acl->allow('Users', $alias, 'read');
$this->Acl->allow($this->Session->read('user'), $alias);
$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'));
}
|
OK — agora você pode tentar acrescentar alguns produtos. Faça
login como um dos seus usuários e acrescente uns dois produtos, só
para ver se tudo dá certo. Pode usar o Cake Console para ver os ACOs
que criou quando acrescentou um novo produto. Você está quase no fim.
Os AROs e ACOs estão definidos e as permissões foram atribuídas. Agora,
o Tor precisa verificar as permissões ao executar as várias ações
relacionadas aos produtos.
|  |