Files
sam-manage/app/Http/Controllers/RoleController.php

80 lines
2.2 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Services\RolePermissionService;
use App\Services\RoleService;
use Illuminate\Http\Request;
use Illuminate\View\View;
class RoleController extends Controller
{
public function __construct(
private readonly RoleService $roleService,
private readonly RolePermissionService $rolePermissionService
) {}
/**
* 역할 목록 (Blade 화면만)
*/
public function index(Request $request): View
{
return view('roles.index');
}
/**
* 역할 생성 화면
*/
public function create(): View
{
$tenantId = session('selected_tenant_id');
// 테넌트 미선택 시 생성 불가
if (! $tenantId || $tenantId === 'all') {
return view('roles.create', [
'requireTenant' => true,
'menus' => collect(),
'permissionTypes' => [],
]);
}
// 메뉴 트리 조회 (권한 매트릭스용)
$menus = $this->rolePermissionService->getMenuTree($tenantId);
// 권한 유형 목록
$permissionTypes = ['view', 'create', 'update', 'delete', 'approve', 'export', 'manage'];
return view('roles.create', compact('menus', 'permissionTypes'));
}
/**
* 역할 수정 화면
*/
public function edit(int $id): View
{
$role = $this->roleService->getRoleById($id);
if (! $role) {
abort(404, '역할을 찾을 수 없습니다.');
}
// 역할이 속한 테넌트의 메뉴만 표시
$effectiveTenantId = $role->tenant_id;
// 메뉴 트리 조회 (권한 매트릭스용)
$menus = $this->rolePermissionService->getMenuTree($effectiveTenantId);
// 권한 유형 목록
$permissionTypes = ['view', 'create', 'update', 'delete', 'approve', 'export', 'manage'];
// 현재 역할의 권한 매트릭스 조회
$permissions = $this->rolePermissionService->getRolePermissionMatrix(
$role->id,
$effectiveTenantId,
$role->guard_name ?? 'web'
);
return view('roles.edit', compact('role', 'menus', 'permissionTypes', 'permissions'));
}
}