Реализация журнала действий - PullRequest
1 голос
/ 13 сентября 2011

Есть ли какой-нибудь класс для аудита действий пользователей? Я имею в виду действия, которые пользователи делают с добавлением, удалением или изменением записи?

Некоторое время назад я использовал phpmyedit, и у него есть опция "logtable" ($opts['logtable'] = 'changelog';), которую можно использовать для "аудита" или отслеживания активности в этой специальной таблице.

Возможно ли это сделать или я должен реализовать это (например) до $f->update()?

1 Ответ

0 голосов
/ 13 сентября 2011

Нет такого класса, но я реализовал это несколько раз.Это включает в себя «подталкивание» стандартного класса Model_Table для включения функциональности во ВСЕ ваши модели.Вот рецепт.

  1. Создайте свой класс модели журнала аудита.Model_AuditLog, вероятно, было бы хорошим именем.
  2. Создайте файл в lib / Model / Table.php, который заменяет общего предка всех ваших моделей на основе приведенного ниже кода.
  3. Напишите аналогичный код для beforeUpdate /afterUpdate и beforeDelete / afterDelete

Вы можете опустить «update» из «beforeInsert», если вы заинтересованы только в успешных операциях.Создайте несколько тестов.Не забудьте убедиться, что Model_Audit НЕ наследует ваш класс, чтобы избежать рекурсии.На самом деле вы можете называть класс по-разному, если не забываете использовать его для моделей.

В какой-то момент Agile Toolkit будет иметь возможность беспрепятственного аудита через Controller, наиболее вероятно в 4.2.


class Model_Table extends Model_MVCTable {

    function beforeInsert($data){
        $this->insert_audit = $this->add('Model_Audit')
            ->set('action','insert');
        $this->insert_audit->update();
        return parent::beforeInsert($data);
    }
    function afterInsert($id){
        $this->insert_audit->set('is_completed',true)
            ->update();
        return parent::afterInsert($id);
    }
}
...