역할 관리 페이지 개선

- 역할 목록: 테넌트/Guard 컬럼 추가, Guard 필터 드롭다운 추가
- 역할 등록/수정: Guard 선택 기능 추가 (API/Web)
- 권한 선택 UI를 메뉴 기반 매트릭스로 변경 (7가지 권한 유형)
- 테넌트 미선택 시 역할 등록 차단
- pagination.js 디버그 로그 제거
This commit is contained in:
2025-11-26 17:11:17 +09:00
parent f029d78614
commit ee9e645290
10 changed files with 365 additions and 124 deletions

View File

@@ -2,6 +2,7 @@
namespace App\Http\Controllers;
use App\Services\RolePermissionService;
use App\Services\RoleService;
use Illuminate\Http\Request;
use Illuminate\View\View;
@@ -9,7 +10,8 @@
class RoleController extends Controller
{
public function __construct(
private readonly RoleService $roleService
private readonly RoleService $roleService,
private readonly RolePermissionService $rolePermissionService
) {}
/**
@@ -27,18 +29,22 @@ public function create(): View
{
$tenantId = session('selected_tenant_id');
// 권한 목록 조회 (현재 테넌트 또는 전체)
$query = \Spatie\Permission\Models\Permission::query()
->where('guard_name', 'web')
->orderBy('name');
if ($tenantId) {
$query->where('tenant_id', $tenantId);
// 테넌트 미선택 시 생성 불가
if (! $tenantId || $tenantId === 'all') {
return view('roles.create', [
'requireTenant' => true,
'menus' => collect(),
'permissionTypes' => [],
]);
}
$permissions = $query->get(['id', 'name']);
// 메뉴 트리 조회 (권한 매트릭스용)
$menus = $this->rolePermissionService->getMenuTree($tenantId);
return view('roles.create', compact('permissions'));
// 권한 유형 목록
$permissionTypes = ['view', 'create', 'update', 'delete', 'approve', 'export', 'manage'];
return view('roles.create', compact('menus', 'permissionTypes'));
}
/**
@@ -53,21 +59,21 @@ public function edit(int $id): View
}
$tenantId = session('selected_tenant_id');
$effectiveTenantId = ($tenantId && $tenantId !== 'all') ? $tenantId : null;
// 권한 목록 조회 (현재 테넌트 또는 전체)
$query = \Spatie\Permission\Models\Permission::query()
->where('guard_name', 'web')
->orderBy('name');
// 메뉴 트리 조회 (권한 매트릭스용)
$menus = $this->rolePermissionService->getMenuTree($effectiveTenantId);
if ($tenantId) {
$query->where('tenant_id', $tenantId);
}
// 권한 유형 목록
$permissionTypes = ['view', 'create', 'update', 'delete', 'approve', 'export', 'manage'];
$permissions = $query->get(['id', 'name']);
// 현재 역할의 권한 매트릭스 조회
$permissions = $this->rolePermissionService->getRolePermissionMatrix(
$role->id,
$effectiveTenantId,
$role->guard_name
);
// 현재 역할이 가진 권한 ID 목록
$rolePermissionIds = $role->permissions->pluck('id')->toArray();
return view('roles.edit', compact('role', 'permissions', 'rolePermissionIds'));
return view('roles.edit', compact('role', 'menus', 'permissionTypes', 'permissions'));
}
}