55 lines
2.4 KiB
PHP
55 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Middleware;
|
|
|
|
use Closure;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Log;
|
|
|
|
class ManagementMiddleware
|
|
{
|
|
/**
|
|
* リクエストから運営元コードを取得し、DBから運営元情報を検証・セッションに保存する。
|
|
* 運営元コードがない場合やDBに存在しない場合は404を返す。
|
|
*
|
|
* @param Request $request 受信したHTTPリクエスト
|
|
* @param Closure $next 次のミドルウェア処理
|
|
* @return mixed 次の処理のレスポンス
|
|
* @throws \Symfony\Component\HttpKernel\Exception\HttpException 運営元コードが見つからない場合
|
|
*/
|
|
public function handle(Request $request, Closure $next): mixed
|
|
{
|
|
// マルチテナント対応のため、URLの最初のセグメントを運営元コードとして扱う
|
|
$path = $request->getPathInfo(); // パス全体を取得
|
|
$segments = explode('/', trim($path, '/')); // '/'で分割
|
|
$managementCode = $segments[0] ?? null; // 最初の部分を運営元コードとする
|
|
|
|
if (!$managementCode) {
|
|
// 不正アクセス防止のため、エラーログでシステム例外を記録
|
|
Log::error("[ERROR] " . now()->format('Y-m-d H:i:s') . " 運営元コードが見つからない: " . $request->getPathInfo());
|
|
abort(404, '運営元コードが見つかりません');
|
|
}
|
|
|
|
// 運営元コードの正当性検証のため、DBで存在確認
|
|
$management = DB::table('management')
|
|
->where('management_code', $managementCode)
|
|
->where('valid_flag', 1) // 有効フラグが1の場合のみ
|
|
->first();
|
|
|
|
if (!$management) {
|
|
// 不正アクセス防止のため、エラーログでシステム例外を記録
|
|
Log::error("[ERROR] " . now()->format('Y-m-d H:i:s') . " 運営元が見つからない: " . $managementCode);
|
|
abort(404, '運営元が見つかりません');
|
|
}
|
|
|
|
// システム操作追跡のため、成功した運営元取得を記録
|
|
Log::info("[INFO] " . now()->format('Y-m-d H:i:s') . " 運営元コード取得成功: " . $managementCode);
|
|
|
|
// 運営元情報を他の処理で利用可能にするため、セッションに保存
|
|
session(['management' => $management]);
|
|
|
|
return $next($request);
|
|
}
|
|
}
|