so-manager-dev.com/app/Http/Middleware/ManagementMiddleware.php
y.higashide 208decc6f4
All checks were successful
Deploy so-manager (auto) / deploy (push) Successful in 23s
app/Http/Middleware/ManagementMiddleware.php を更新
2026-01-16 15:34:56 +09:00

56 lines
2.5 KiB
PHP

<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Http\Response;
class ManagementMiddleware
{
/**
* リクエストから運営元コードを取得し、DBから運営元情報を検証・セッションに保存する。
* 運営元コードがない場合やDBに存在しない場合は404を返す。
*
* @param Request $request 受信したHTTPリクエスト
* @param Closure $next 次のミドルウェア処理
* @return Response 次の処理のレスポンス
* @throws \Symfony\Component\HttpKernel\Exception\HttpException 運営元コードが見つからない場合
*/
public function handle(Request $request, Closure $next): Response
{
// マルチテナント対応のため、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);
}
}