You are on page 1of 12

CakePHP 2.

1 AclComponent
Aprenda a definir permisses de acesso baseadas em nvel nas suas aplicaes
com CakePHP 2.1
O que Acl?
Segundo consta no Wikipdia:
Access Control List ou Lista de controle de acesso (tambm conhecida pelo acrnimo ACL) definida pela rea de
cincia da computao como uma lista que define quem tem permisso de acesso a certos servios. Isso , para quem um
servidor deve permitir ou negar determinada tarefa. normalmente uma lista de princpios com os tipos de acesso
definido para cada usurio ou grupo..

Em CakePHP, as ACLs so tratadas por meio do AclComponent, que um dos assuntos menos
discutidos, talvez porque seja uma poro relativamente complicada do Framework a qual
poucos desenvolvedores dominam. Porm, se voc j possui experincia com o CakePHP,
certamente ter pouca dificuldade na utilizao do AclComponent e vai perceber o quanto
esta ferramenta completa e til em grandes aplicaes.
Como o AclComponent trabalha
ARO tudo aquilo que deseja ter acesso determinados recursos ou
reas da aplicao.
ACO representa tudo aquilo que se deseja proteger/controlar na
aplicao, como um controller ou ction por exemplo.
O AclComponent, a curto modo, funciona com base em dois princpios:
ARO - Access Request Object e ACO - Access Control Object. Trocando em midos:
OBS: Aqui fala-se em objetos na representao de AROS e ACOS e isto ocorre
porque muitas vezes quem est requisitando algo na aplicao no um usurio.
Voc poderia querer limitar o acesso de um determinado controller alguma outra
poro do seu sistema.
Um exemplo prtico
Considere um sistema de Forum de discurso, como um phpBB da vida, onde h usurios
registrados, visitantes e moderadores. H ainda o administrador, que tem total controle do
sistema. Considere ainda que haja no sistema, recursos como Tpicos, Posts e Enquetes. Com
base neste cenrio, poderemos ter os seguintes AROs:
Administrador
Registrado
Moderador
Visitante

Com isto, fica evidente que teremos as seguintes ACOs:
Topicos
Posts
Enquetes
Um exemplo prtico
Para facilitar a visualizao, imagine por um instante que tenhamos apenas trs pessoas cadastradas no
sistema. Fred, Geane e Ana Lusa. Imagine ainda que o cenrio seja o seguinte:
Fred um administrador
Geane uma moderadora
Ana Lusa uma usuria registrada
Um exemplo prtico
Em CakePHP, as Acls so organizadas em forma de rvore estrutural (Tree Structure), o que permite uma
boa visualizao do cenrio e possibilita a realizao ajustes mais finos nos controles. Vejamos como fica
estrutura da nossa ACL.
Sistema de Frum(Deny: all)
Administrador(Allow: All)
Fred
Moderador(Allow: Editar, criar e excluir tpicos, posts e enquetes alm de suspender contas de
usurios)
Geane
Registrado(Allow: Abrir tpicos e criar posts alm poder visualizar qualquer contedo e deletar os
prprios posts)
Ana Lusa
Um exemplo prtico
Database ACL
O CakePHP vem por padro configurado para utilizar banco de dados
quando se deseja trabalhar com ACLs. Models especficos so utilizados pelo
Cake para interagir com sua base de dados afim de gravar e receber dados
das ACLs em formato de rvore. Para inicializar o banco de dados e
interagir com as estruturas ARO e ACO, utilize o seguinte comando:


Este comando cria as tabelas necessrias que so: aros, acos e aros_acos
$ cake schema create DbAcl
Um exemplo prtico
Resumos dos comandos
Inicializa o banco de dados para trabalhar com ACL:


Cria um ARO raiz chamado Roles:


Cria um novo ARO herdeiro do ARO raiz:
$ cake schema create DbAcl
$ cake acl create aro root Roles
$ cake acl create aro Roles Role.1
Um exemplo prtico
Resumos dos comandos
Cria um novo ACO Raiz chamado controllers:


Cria um novo ACO chamado Users, herdeiro do ACO raiz controllers:


Cria um novo ACO chamado admin_login, herdeiro do ACO Users



$ cake acl create aco root controllers
$ cake acl create aco controllers Users
$ cake acl create aco controllers/Users admin_login
Um exemplo prtico
Resumos dos comandos
Libera acesso ao ACO admin_login a quem for MODERADOR:


Nega acesso ao ACO admin_login a quem for MODERADOR:





$ cake acl grant Role.2 controllers/Users/admin_login all
$ cake acl deny Role.2 controllers/Users/admin_login
Contatos
@luisfredgs
https://www.facebook.com/luisfredgs
luis.fred
Referncias
ACL Shell
<http://book.cakephp.org/2.0/en/console-and-shells/acl-shell.html>
Access Control Lists
<http://book.cakephp.org/2.0/en/core-libraries/components/access-control-lists.html>

You might also like