Files
sam-api/app/Http/Middleware/PermMapper.php
kent 73d06e03b0 fix : 권한관리 기능 추가 (각 기능 확인 필요)
- 메뉴관리
- 역할관리
- 부서관리
- 메뉴, 부서, 역할, 유저 - 권한 연동
2025-08-16 03:25:50 +09:00

50 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);
}
}