1

ユーザーのアクションの監査を行うために利用できるクラスはありますか?ユーザーがレコードの追加、削除、または変更を行うアクションを意味しますか?

少し前にphpmyeditを使用しましたが、「logtable」オプション($opts['logtable'] = 'changelog';)があり、その特別なテーブルへのアクティビティを「監査」または追跡するために使用できます。

これを行うことは可能ですか、それとも(たとえば)前に実装する必要があります$f->update()か?

4

1 に答える 1

0

そのようなクラスはありませんが、これを数回実装しました。これには、標準の Model_Table クラスを「プッシュ」して、すべてのモデルに機能を含めることが含まれます。レシピはこちら。

  1. 監査ログ モデル クラスを作成します。Model_AuditLog はおそらく適切な名前です。
  2. 以下のコードに基づいて、すべてのモデルの共通の祖先を置き換えるファイルを lib/Model/Table.php に作成します。
  3. beforeUpdate / afterUpdate と beforeDelete / afterDelete に同様のコードを書く

操作の成功のみに関心がある場合は、「beforeInsert」から「update」を省略できます。いくつかのテストを作成します。再帰を避けるために、Model_Audit がクラスを継承しないことを忘れないでください。モデルに使用することを忘れない限り、実際にはクラスに別の名前を付けることができます。

Agile Toolkit は、おそらく 4.2 で、ある時点で Controller を介してシームレスな監査をサポートする予定です。


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);
    }
}
于 2011-09-13T19:45:41.237 に答える