Files
sam-api/app/Http/Middleware/PermMapper.php
hskwon cc206fdbed style: Laravel Pint 코드 포맷팅 적용
- PSR-12 스타일 가이드 준수
- 302개 파일 스타일 이슈 자동 수정
- 코드 로직 변경 없음 (포맷팅만)
2025-11-06 17:45:49 +09:00

51 lines
1.4 KiB
PHP

<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class PermMapper
{
/** HTTP 메서드 → 액션 버킷 */
private array $actionMap = [
'GET' => 'view',
'HEAD' => 'view',
'POST' => 'create',
'PUT' => 'update',
'PATCH' => 'update',
'DELETE' => 'delete',
];
public function handle(Request $request, Closure $next)
{
$route = $request->route();
if (! $route) {
return $next($request);
}
// 1) 이미 perm이 attributes에 있으면 존중
if ($request->attributes->get('perm')) {
return $next($request);
}
// 2) 라우트 defaults로 강제 지정된 perm/permission 우선
$forced = $route->defaults['perm'] ?? $route->defaults['permission'] ?? null;
if ($forced) {
$request->attributes->set('perm', $forced);
return $next($request);
}
// 3) menu_id 가 지정된 경우: HTTP 메서드 → 액션으로 perm 생성
$menuId = $route->defaults['menu_id'] ?? null;
if ($menuId) {
$action = $this->actionMap[$request->method()] ?? 'view';
$request->attributes->set('perm', "menu:{$menuId}.{$action}");
}
// 4) menu_id/perm 둘 다 없으면 설정 안 함(체크 미들웨어 정책에 따름)
return $next($request);
}
}