Ao modificar um usuário, você deve atualizar manualmente o ARO correspondente. Este código deve ser executado sempre que você for atualizar alguma informação do usuário:
Uma alternativa à essa atualização do ARO após uma mudança no group_id é adicionar o seguinte código à seu model User. Assim você não precisa se preocupar em duplicar código.
Agora que temos nossos usuários e grupos (aros), podemos começar a incluir nossos controllers e configurações de permissão para usuários e grupos no Acl, bem como habilitar o login / logout.
Nossos AROs estarão automaticamente criando a si mesmos quando novos usuários forem criados. Que tal poder gerar automagicamente os ACOs a partir de nossos controller e respectivas actions? Bem, infelizmente o CakePHP não vem de fábrica com uma maneira fácil de fazer isso. No entanto, as classes padrão dispõem de algumas maneiras para facilitar a criação de ACO’s manualmente. Você pode criar objetos ACO a partir do shell Acl ou então você pode usar o AclComponent. Para criar Acos a partir do shell, pode-se fazer o seguinte:
As duas maneiras devem criar nosso ACO ‘root’ de primeiro nível chamado ‘controllers’. A finalidade deste nó raiz é possibilitar a permissão/proibição de acesso num escopo global além de permitir o uso do Acl para outros propósitos não relacionados aos controllers/actions, tais como verificação de permissões em nível de registro de model, por exemplo. Como vamos usar um nó raiz como entrada global para ACO, precisamos fazer uma pequena modificação na configuração de nosso AuthComponent. O AuthComponent precisa saber da existência deste nó raiz, de forma que ao fazer as verificações de ACL ele possa utilizar o caminho correto do nó ao procurar por controllers/actions. No AppController, adicione o seguinte ao método beforeFilter:
Como já mencionamos antes, não há uma maneira já pronta de cadastrar todos os nossos controllers e actions no Acl. Por outro lado, todos nós detestamos fazer ações repetitivas como digitar uma lista extensa de centenas de actions em uma grande aplicação. Isto nos motivou a busca de um conjunto de funções para construção de tabelas ACO. Estas funções irão vasculhar cada controller em sua aplicação. Quaisquer métodos não-privados e que não sejam próprios de Controller serão adicionados à tabela Acl, definidos adequadamente sob a entrada de seu respectivo controller pai. Você pode incluir e executar isto em seu AppController ou em qualquer controller em que faça sentido, apenas certifique-se de removê-lo antes de colocar sua aplicação em produção.