Files
sam-manage/app/Http/Controllers/RoleController.php
hskwon 5f50716d7f feat: Phase 4-2 역할 관리 시스템 구현 (HTMX + API 패턴)
- RoleService, RoleController (Blade/API) 생성
- 역할 CRUD 기능 완성 (목록/생성/수정/삭제)
- FormRequest 검증 (StoreRoleRequest, UpdateRoleRequest)
- HTMX 패턴 적용 (index, create, edit)
- 권한 선택 UI (체크박스, 전체 선택/해제)
- Tenant Selector 통합
- 레이아웃 패턴 문서화 (LAYOUT_PATTERN.md)
- Sidebar 메뉴에 역할 관리 추가
- Pagination partial 컴포넌트 추가
- Tenants 레이아웃 100% 폭으로 통일

주요 수정:
- UpdateRoleRequest 라우트 파라미터 수정 (role → id)
- RoleController permissions 조회 시 description 제거
- Conditional tenant filtering 적용
2025-11-24 16:36:02 +09:00

73 lines
1.8 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Services\RoleService;
use Illuminate\Http\Request;
use Illuminate\View\View;
class RoleController extends Controller
{
public function __construct(
private readonly RoleService $roleService
) {}
/**
* 역할 목록 (Blade 화면만)
*/
public function index(Request $request): View
{
return view('roles.index');
}
/**
* 역할 생성 화면
*/
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);
}
$permissions = $query->get(['id', 'name']);
return view('roles.create', compact('permissions'));
}
/**
* 역할 수정 화면
*/
public function edit(int $id): View
{
$role = $this->roleService->getRoleById($id);
if (!$role) {
abort(404, '역할을 찾을 수 없습니다.');
}
$tenantId = session('selected_tenant_id');
// 권한 목록 조회 (현재 테넌트 또는 전체)
$query = \Spatie\Permission\Models\Permission::query()
->where('guard_name', 'web')
->orderBy('name');
if ($tenantId) {
$query->where('tenant_id', $tenantId);
}
$permissions = $query->get(['id', 'name']);
// 현재 역할이 가진 권한 ID 목록
$rolePermissionIds = $role->permissions->pluck('id')->toArray();
return view('roles.edit', compact('role', 'permissions', 'rolePermissionIds'));
}
}