Laravel Auditingで始めるデータ監査:不正やミスを簡単に追跡できるようにする方法
はじめに
こんにちは、Kouです。
早速ですが、今回はLaravelで複数のアカウント管理をしている場合、行動に誤りがあった場合など、 原因特定と作業者の特定を行う必要があった為、「Laravel Auditing」というパッケージを利用した記録を残します。
前回は「Google SpreadSheetに登録したデータをウェブサイトに表示する方法」を投稿しました。
概要
Laravel Auditing パッケージを利用して、レコードの作成、変更、削除や属性の変更など、 モデル内で発生するすべての変更を追跡(ログ取り)できるようにした手順です。
変更前と変更後のデータも持つので、履歴管理としても使えそうです。
カスタマイズ要件として、ログインしているユーザの情報を一部変えて監査データを作成しました。
基本的にドキュメントが整理されているので、他の必要な情報は公式のガイドを見ていただければればと思います😅
インストール
Composer経由でインストールする必要があります。
composer require owen-it/laravel-auditing
※ sail環境
sail composer require owen-it/laravel-auditing
サービス プロバイダーを登録
'providers' => [
// ...
/*
* Package Service Providers...
*/
// ...
+ OwenIt\Auditing\AuditingServiceProvider::class,
// ...
構成ファイルの作成
php artisan vendor:publish --provider "OwenIt\Auditing\AuditingServiceProvider" --tag="config"
※ sail環境
sail artisan vendor:publish --provider "OwenIt\Auditing\AuditingServiceProvider" --tag="config"
config/audit.php が作成される。
サービスの有効化/無効化の設定
envを利用して、環境により設定の変更ができる。
'enabled' => env('AUDITING_ENABLED', true),
AUDITING_ENABLED=true #falseで無効
データベースの用意
次のコマンドで、auditsテーブルの定義が作成される。
php artisan vendor:publish --provider "OwenIt\Auditing\AuditingServiceProvider" --tag="migrations"
※ sail環境
sail artisan vendor:publish --provider "OwenIt\Auditing\AuditingServiceProvider" --tag="migrations"
マイグレーション
必要に応じて定義をカスタマイズし、テーブルの作成をする。
php artisan migrate
※ sail環境
sail artisan migrate
監査対象のモデルをセットアップ
例としてUserモデルの監査を行う
<?php
namespace App\Models;
// ...
+use OwenIt\Auditing\Contracts\Auditable;
-class User extends Model
+class User extends Model implements Auditable
{
+ use \OwenIt\Auditing\Auditable;
必要に応じて、他のモデルへ同様の修正を行う。
結果のサンプル
修正を行ったモデルを使用して、実際にレコードの作成、変更、削除を行った結果を示します。
id | user_type | user_id | event | auditable_type | auditable_id | old_values | new_values | url | ip_address | user_agent | tags | created_at | updated_at |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | App\Models\User | 1 | created | App\Models\Xxxx | 1 | [] | {"id":1,"data":"xxx"} | xxx | xxx | xxx | xxx | xxx | xxx |
2 | App\Models\User | 1 | deleted | App\Models\Xxxx | 1 | {"id":1,"data":"xxx"} | [] | xxx | xxx | xxx | xxx | xxx | xxx |
カスタマイズ
- auditsテーブルに項目を追加したい場合は、新しいリゾルバーを作成し、構成ファイルのresolvers配列に追加するだけです。
php artisan auditing:audit-resolver CustomUserResolver
※ sail環境
sail artisan auditing:audit-resolver CustomUserResolver
<?php
namespace App\AuditResolvers;
use OwenIt\Auditing\Contracts\Auditable;
use OwenIt\Auditing\Contracts\Resolver;
class CustomUserResolver implements Resolver
{
public static function resolve(Auditable $auditable)
{
/*
* ここに追加した項目に入れる処理を書く
*/
}
}
構成ファイルで作成したCustomUserResolverを設定する。
'resolvers' => [
'ip_address' => OwenIt\Auditing\Resolvers\IpAddressResolver::class,
'user_agent' => OwenIt\Auditing\Resolvers\UserAgentResolver::class,
'url' => OwenIt\Auditing\Resolvers\UrlResolver::class,
+ 'custom_user' => App\AuditResolvers\CustomUserResolver::class,
],
おわりに
簡単にモデルを使用して監査レコードを取得することができるため、
現在はログを残すだけの運用を行っていますが、将来的には画面を作成してみることも検討しています。
Discussion