Laravel Auditing에서 데이터베이스 변경 모니터링
11817 단어 laravel-auditngPHPLaravel
개요
Laravel Auditing은 데이터베이스에 지정된 감시된 표를 추가, 업데이트, 삭제 등 변경할 때 누가 어떤 변경을 했는지 자동으로 기록하는 소프트웨어 패키지입니다.
설치 및 구성
설치
composer에서 진행합니다.
composer require owen-it/laravel-auditing
프로비저닝
설치 후 공급업체를 추가합니다
config/app.php
.config/app.php
'providers' => [
+ OwenIt\Auditing\AuditingServiceProvider::class,
],
추가한 후 다음 명령을 실행하여 Laravel Auditing에 사용할 프로필을 만듭니다.php artisan vendor:publish --provider "OwenIt\Auditing\AuditingServiceProvider" --tag="config"
실행할 때 config/audit.php
라는 파일이 생성됩니다.별도의 사용자 정의가 필요하지 않으면 다음 명령으로 데이터베이스의 마이그레이션 파일을 만듭니다.php artisan vendor:publish --provider "OwenIt\Auditing\AuditingServiceProvider" --tag="migrations"
실행 후,audits 테이블을 만들기 위한 database/migrations/yyyy_mm_dd_nnnnnn_create_audits_table.php
파일을 만듭니다.audits 테이블을 만들기 위해 만든 후 이식합니다.php artisan migrate
감시하다
기본 설정
설정이 완료되면 감시하고 싶은 데이터 모델에 추적합니다.예를 들어items표 데이터를 감시하고 싶은 상황에서
app/Item.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
+ use OwenIt\Auditing\Contracts\Auditable;
+
+ class Item extends Model implements Auditable
- class Item extends Model
{
+ use \OwenIt\Auditing\Auditable;
좀 복잡하지만 인터페이스는 OwenIt\Auditing\Contracts\Auditable
, trait는 \OwenIt\Auditing\Auditable
로 지정됩니다.이것만 추적하면 감시 대상이 된다.실제 감시
그럼, 이 시계에 대해 새로운 로그인, 변경, 삭제를 진행합시다.이 동작을 실행하면audits 테이블에 다음 데이터를 추가합니다.
id
user_type
user_id
event
auditable_type
auditable_id
old_values
new_values
url
ip_address
user_agent
tags
created_at
updated_at
일
NULL
NULL
updated
App\Item
이
{"name":"\u8ffd\u52a01"}
{"name":"\u8ffd\u52a02"}
http://localhost:8000/items/2
127.0.0.1
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Safari/605.1.15
NULL
2020-03-23 12:20:34
2020-03-23 12:20:34
이
App\User
일
created
App\Item
삼
[]
{"name":"\u307b\u3052","stock":"10","id":3}
http://localhost:8000/items
127.0.0.1
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Safari/605.1.15
NULL
2020-03-23 12:21:39
2020-03-23 12:21:39
삼
App\User
일
deleted
App\Item
삼
{"id":"3","name":"\u307b\u3052","stock":"10"}
[]
http://localhost:8000/items/3
127.0.0.1
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.5 Safari/605.1.15
NULL
2020-03-23 12:51:57
2020-03-23 12:51:57
감시 대상의 데이터는 다음과 같은 내용을 축적했다.
필드 이름
컨텐츠 축적
id
데이터 모니터링 ID
user_type
사용자 모델의 클래스 이름
user_id
사용자 ID
event
실행 이벤트
auditable_type
업데이트된 데이터 모델의 클래스 이름
auditable_id
업데이트 데이터 식별
old_values
이전 데이터 업데이트
new_values
업데이트된 데이터
url
실행 URL
ip_address
IP 주소
user_agent
사용자 에이전트
tags
표식
created_at
작성 날짜 및 시간 (= 데이터 업데이트 날짜 및 시간)
updated_at
업데이트 시간
많이 생각하지 않지만 로그인하지 않고 데이터를 업데이트하면
user_type
, user_id
비어 있습니다.모니터링 데이터 가져오기
감시 데이터는 감시 대상의 모델과 관련이 있다.
<?php
$item = Item::find(1);
// 該当データの全ての監視データ
$audits = $item->audits;
// 該当データの最初の監視データ
$first = $item->audits()->first();
// 該当データの直近の監視データ
$latest = $item->audits()->latest()->first();
// 該当データの監視データのID指定
$audit = $item->audits()->find(1);
모니터링 데이터도 Eloquent 모델로 직접 얻을 수 있습니다.<?php
use OwenIt\Auditing\Models\Audit;
// 全件取得
$audits = Audit::all();
// ID指定
$audit = Audit::find(1);
사용자 정의
콘솔 명령 실행 모니터링
기본적으로 콘솔 명령과 작업 업데이트는 감시되지 않습니다.모니터링하려면
config/audit.php
에서 설정을 변경합니다.config/audit.php
- 'console' => false,
+ 'console' => true,
모니터링 필드 축소
기본적으로 등록 및 업데이트 날짜 및 시간은 적용되지 않습니다.모니터링 필드를 축소하려면 모니터링 개체 모델에 추가로 설정합니다.
app/Item.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use OwenIt\Auditing\Contracts\Auditable;
class Item extends Model implements Auditable
{
use \OwenIt\Auditing\Auditable;
+ protected $auditInclude = [
+ 'name',
+ ];
반대로 배제하려면 $auditExclude
로 지정하여 제외할 수 있다.축적된 데이터를 바꾸고 싶어요.
저장할 데이터를 사용자 정의하려면 자원을 만듭니다.Laravel Auditing은 다음과 같은 Resolver 인터페이스를 제공합니다.
인터페이스
개요
OwenIt\Auditing\Contracts\IpAddressResolver
IP 주소용 I/F
OwenIt\Auditing\Contracts\UrlResolver
URL용 I/F
OwenIt\Auditing\Contracts\UserAgentResolver
사용자 에이전트용 I/F
OwenIt\Auditing\Contracts\UserResolver
사용자 모델용 I/F
이를 통해 축적된 데이터를 바꿀 수 있다.
app/resolvers/IpAddressResolver.php
<?php
namespace App\Resolvers;
use Illuminate\Support\Facades\Request;
class IpAddressResolver implements \OwenIt\Auditing\Contracts\IpAddressResolver
{
/**
* {@inheritdoc}
*/
public static function resolve(): string
{
return Request::header('HTTP_X_FORWARDED_FOR', '0.0.0.0');
}
}
config/audit.php
에 자체 Resolver를 설정하여 반영합니다.config/audit.php
return [
'resolver' = [
'user' => OwenIt\Auditing\Resolvers\UserResolver::class,
- 'ip_address' => OwenIt\Auditing\Resolvers\IpAddressResolver::class,
+ 'ip_address' => App\Resolvers\IpAddressResolver::class,
'user_agent' => OwenIt\Auditing\Resolvers\UserAgentResolver::class,
'url' => OwenIt\Auditing\Resolvers\UrlResolver::class,
],
];
마스크 쓰고 싶어요.
모니터링 데이터는 변경 전, 후의 값을 그대로 저장하지만 때로는 마스크 저장을 원할 수도 있습니다.이 경우 모니터링할 모델로 설정하여 마스크를 사용할 수 있습니다.
app/Item.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use OwenIt\Auditing\Contracts\Auditable;
+use OwenIt\Auditing\Redactors\LeftRedactor;
class Item extends Model implements Auditable
{
use \OwenIt\Auditing\Auditable;
+ protected $attributeModifiers = [
+ 'title' => LeftRedactor::class,
+ ];
LeftRedactor
왼쪽에서 오른쪽 마스크 90%, 나머지 10%는 원형으로, RightRedactor
오른쪽에서 오른쪽 마스크 90%.마스크 섹션은 #####
로 저장됩니다.특정한 사건만 감시하고 싶어요.
기본적으로 추가, 업데이트 및 삭제를 모니터링하지만 설정을 통해 이벤트 범위를 좁힐 수 있습니다.예를 들어, 삭제만 모니터링하려면 다음과 같이 설정합니다.
총체적
config/audit.php
'events' => [
- 'created',
- 'updated',
'deleted',
- 'restored',
],
특정 모니터링만
app/Item.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use OwenIt\Auditing\Contracts\Auditable;
class Item extends Model implements Auditable
{
use \OwenIt\Auditing\Auditable;
+ protected $auditEvents = [
+ 'deleted',
+ ];
모니터링 로그 상한선 설정
기본적으로 모니터링 로그는 계속 누적됩니다.상한선을 설정하려면 다음과 같은 설정을 통해 상한선을 초과한 오래된 데이터를 삭제합니다.
총체적
config/audit.php
- 'threshold' => 0, // 0だと上限なし
+ 'threshold' => 10,
특정 모니터링만
app/Item.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use OwenIt\Auditing\Contracts\Auditable;
class Item extends Model implements Auditable
{
use \OwenIt\Auditing\Auditable;
+ protected $auditThreshold = 10;
Reference
이 문제에 관하여(Laravel Auditing에서 데이터베이스 변경 모니터링), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ippey_s/items/1bf199572b798ba331b2텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)