Este plugin inclui funções para tornar a auditoria de sistemas em CakePHP mais simples.
A ideia central é manter a informação de qual usuário fez o quê, e quando isso foi feito.
O Plugin utiliza uma classe estática como “repositório” das configurações globais dele. Estas configurações ficam então acessíveis ao Behavior e Helper, garantindo funcionamento correto de ambos.
É a classe que armazena as configurações do Plugin. Tem acesso estático aos seus quatro atributos, que são:
- responsibleModel Uma string com o nome do Modelo que armazena os usuários do sistema;
- responsibleId Um inteiro que representa o ID do usuário logado no sistema;
- Logger A instância de um Modelo válido para salvar os logs;
- serialize Uma string contendo o nome de uma função válida para serializar arrays;
- unserialize Uma string contendo o nome de uma função válida para deserializar strings geradas pela função definida no atributo anterior.
No próximo item é sugerido uma forma de definir esses atributos para toda a aplicação.
Em todo lugar que precisar acessar esta classe (inclusive na hora de definir suas propriedades), faça a sua inclusão para garantir que esteja definida naquele escopo:
App::uses('AuditableConfig', 'Auditable.Lib');
Existem duas configurações mínimas: a primeira é definir O Modelo que persistirá a mensagem
de log, a segunda é definir, logo que esteja disponível, a informação sobre o usuário logado.
Para a primeira, é preferível sobrecarregar o construtor do AppModel de maneira que a instância
do Modelo esteja pronta sempre que necessária. No seu AppModel faça algo como:
public function __construct($id = false, $table = null, $ds = null) { if(get_class($this) !== 'Logger' && empty(AuditableConfig::$Logger)) { // Caso deseje usar o modelo padrão, utilize como abaixo, caso contrário você pode usar qualquer modelo AuditableConfig::$Logger = ClassRegistry::init('Auditable.Logger', true); } parent::__construct($id, $table, $ds); }
Para a informação do usuário logado, uma sugestão é usar o callback do AppController, deixando-o mais ou menos assim:
public function beforeFilter() { parent::beforeFilter(); if($this->Auth->loggedIn()) { AuditableConfig::$responsibleId = $this->Auth->user('id'); } }
Em seguida você deve configurar em cada um dos modelos auditáveis o behavior Auditable, incluindo
ele em seu $actsAs da seguinte maneira
public $actsAs = array('Auditable.Auditable');
É possível configurar alguns items do behavior, são eles:
- auditSql : Opção para habilitar o log das queries geradas pelo CakePHP. O padrão é true.
- skip : Lista (array) com nome dos campos que devem ser ignoradas no log.
- fields : Aceita os dois índices abaixo
- created : Nome do campo presente em cada modelo para armazenar quem criou o registro
- modified : Nome do campo presente em cada modelo para armazenar quem alterou o registro
Suas configurações são:
- formats : Um array com os diferentes formatos utilizados nos logs, conforme abaixo
- general : Uma string que será usada como descrição do log. Aceita dois placeholders: ‘:action’ e ‘:data’ que representam respectivamente a ação (criação ou modificação) e o que foi efetivamente alterado.
- prepend : Uma string que será prefixada em cada campo do log. Não aceita placeholders.
- pospend : Uma string que será pósfixada em cada campo do log. Não aceita placeholders.
- create : Uma string que será usado para logs de criação. Aceita os placeholders ‘:field’ e ‘:value’
- modify : Um string que será usada para logs de modificação. Aceita os placeholders ‘:field’, ‘:old’ e ‘:new’
- delete : Uma string que será usada para logs de remoção. Aceita os placeholders ‘:field’ e ‘:value’
Para usa-lo na view, basta invocar o método format
echo $this->Auditor->format($data['LogDetail']['difference'], $data['Logger']['type']);
Onde o primeiro parâmetro é a coluna ‘difference’ do modelo LogDetail e o segundo é o tipo de log (‘create’, ‘modify’, ‘delete’).
- Copyright 2011-2013, Radig – Soluções em TI
- Licença MIT – Isto quer dizer que o código está disponível sem nenhuma garantia, ao mesmo tempo que
você pode usa-lo de forma isolada ou em conjunto com seu próprio código.
- Este behavior requer PHP versão >= 5.3
- Compatível com CakePHP 2.x
- Consulte o branch 1.3 para à versão com suporte ao CakePHP 1.3 e PHP >= 5.2
- Consulte os testes incluído no plugin para ver melhor seu funcionamento