/auditable

CakePHP plugin for loggin operations in systems

Primary LanguagePHPMIT LicenseMIT

CakePHP Auditable Build Status

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.

Como usar

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.

Classe AuditableConfig

É 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');

Configuração mínima do Plugin

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');

Behavior 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

Helper Auditor

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

Autor e Copyright

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

Observações

  • 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