diff --git a/app/Http/Controllers/DepartmentPermissionController.php b/app/Http/Controllers/DepartmentPermissionController.php index 3a4fc5b8..45e799b6 100644 --- a/app/Http/Controllers/DepartmentPermissionController.php +++ b/app/Http/Controllers/DepartmentPermissionController.php @@ -2,6 +2,8 @@ namespace App\Http\Controllers; +use App\Models\Tenants\Department; +use App\Models\Tenants\Tenant; use App\Services\DepartmentPermissionService; use Illuminate\Http\Request; @@ -22,14 +24,27 @@ public function index(Request $request) $tenantId = session('selected_tenant_id'); // 부서 목록 조회 - $departments = \App\Models\Tenants\Department::query(); + $departmentsQuery = Department::query()->orderBy('tenant_id')->orderBy('sort_order')->orderBy('name'); + if ($tenantId && $tenantId !== 'all') { - $departments->where('tenant_id', $tenantId); + // 특정 테넌트 선택 시 + $departments = $departmentsQuery->where('tenant_id', $tenantId)->get(); + $departmentsByTenant = null; + } else { + // 전체 선택 시 테넌트별 그룹핑 + $departments = $departmentsQuery->get(); + $departmentsByTenant = $departments->groupBy('tenant_id'); + + // 테넌트 정보 로드 + $tenantIds = $departmentsByTenant->keys()->filter()->toArray(); + $tenants = Tenant::whereIn('id', $tenantIds)->pluck('company_name', 'id'); } - $departments = $departments->orderBy('sort_order')->orderBy('name')->get(); return view('department-permissions.index', [ 'departments' => $departments, + 'departmentsByTenant' => $departmentsByTenant ?? null, + 'tenants' => $tenants ?? collect(), + 'selectedTenantId' => $tenantId, ]); } } diff --git a/app/Http/Controllers/RolePermissionController.php b/app/Http/Controllers/RolePermissionController.php index a558d3fe..aa05ed5a 100644 --- a/app/Http/Controllers/RolePermissionController.php +++ b/app/Http/Controllers/RolePermissionController.php @@ -2,6 +2,8 @@ namespace App\Http\Controllers; +use App\Models\Role; +use App\Models\Tenants\Tenant; use App\Services\RolePermissionService; use Illuminate\Http\Request; @@ -22,14 +24,27 @@ public function index(Request $request) $tenantId = session('selected_tenant_id'); // 역할 목록 조회 - $roles = \App\Models\Role::query(); + $rolesQuery = Role::query()->orderBy('tenant_id')->orderBy('name'); + if ($tenantId && $tenantId !== 'all') { - $roles->where('tenant_id', $tenantId); + // 특정 테넌트 선택 시 + $roles = $rolesQuery->where('tenant_id', $tenantId)->get(); + $rolesByTenant = null; + } else { + // 전체 선택 시 테넌트별 그룹핑 + $roles = $rolesQuery->get(); + $rolesByTenant = $roles->groupBy('tenant_id'); + + // 테넌트 정보 로드 + $tenantIds = $rolesByTenant->keys()->filter()->toArray(); + $tenants = Tenant::whereIn('id', $tenantIds)->pluck('company_name', 'id'); } - $roles = $roles->orderBy('name')->get(); return view('role-permissions.index', [ 'roles' => $roles, + 'rolesByTenant' => $rolesByTenant ?? null, + 'tenants' => $tenants ?? collect(), + 'selectedTenantId' => $tenantId, ]); } } diff --git a/docs/[MNG-2025-11-26] role-department-permission-tenant-grouping.md b/docs/[MNG-2025-11-26] role-department-permission-tenant-grouping.md new file mode 100644 index 00000000..7b45b86f --- /dev/null +++ b/docs/[MNG-2025-11-26] role-department-permission-tenant-grouping.md @@ -0,0 +1,50 @@ +# 역할/부서 권한 관리 - 테넌트별 그룹핑 + +## 변경 일자 +2025-11-26 + +## 변경 목적 +- "전체" 테넌트 선택 시 역할/부서가 혼합되어 표시되는 문제 해결 +- 테넌트별로 그룹핑하여 가독성 향상 + +## 변경 파일 + +### 1. Controllers +| 파일 | 변경 내용 | +|------|----------| +| `app/Http/Controllers/RolePermissionController.php` | 테넌트별 역할 그룹핑 로직 추가 | +| `app/Http/Controllers/DepartmentPermissionController.php` | 테넌트별 부서 그룹핑 로직 추가 | + +**주요 로직:** +```php +if ($tenantId && $tenantId !== 'all') { + // 특정 테넌트 선택 시 기존 방식 + $roles = $rolesQuery->where('tenant_id', $tenantId)->get(); + $rolesByTenant = null; +} else { + // 전체 선택 시 테넌트별 그룹핑 + $roles = $rolesQuery->get(); + $rolesByTenant = $roles->groupBy('tenant_id'); + $tenantIds = $rolesByTenant->keys()->filter()->toArray(); + $tenants = Tenant::whereIn('id', $tenantIds)->pluck('company_name', 'id'); +} +``` + +### 2. Views +| 파일 | 변경 내용 | +|------|----------| +| `resources/views/role-permissions/index.blade.php` | 테넌트별 섹션 헤더 및 그룹핑 UI | +| `resources/views/department-permissions/index.blade.php` | 테넌트별 섹션 헤더 및 그룹핑 UI | + +**UI 변경:** +- 전체 테넌트 선택 시: 테넌트별 섹션으로 구분 (회색 라벨) +- 선택된 역할/부서 표시: `[테넌트명] 역할명 역할` 형식 +- 기존 단일 테넌트 선택 시: 기존 UI 유지 + +## 테스트 결과 +- PHP 문법 검사: 통과 +- Laravel Pint: 통과 +- 브라우저 테스트: 테넌트별 그룹핑 정상 동작 + +## 관련 이슈 +- tenants 테이블 컬럼명: `company_name` (name 아님) diff --git a/resources/views/department-permissions/index.blade.php b/resources/views/department-permissions/index.blade.php index 27163114..80abef4e 100644 --- a/resources/views/department-permissions/index.blade.php +++ b/resources/views/department-permissions/index.blade.php @@ -11,25 +11,57 @@