fix : 권한관리 기능 추가 (각 기능 확인 필요)
- 메뉴관리 - 역할관리 - 부서관리 - 메뉴, 부서, 역할, 유저 - 권한 연동
This commit is contained in:
49
app/Http/Middleware/PermMapper.php
Normal file
49
app/Http/Middleware/PermMapper.php
Normal file
@@ -0,0 +1,49 @@
|
||||
<?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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user