Files
sam-manage/ROLE_PERMISSION_SESSION_SUMMARY.md
hskwon 2a9b697baf UI 개선: 테넌트 선택 헤더 이동 및 역할 권한 관리 개선
- 테넌트 선택을 각 페이지에서 헤더로 통합 이동
- 페이지 제목 이모지 제거 및 상단 여백(mt-6) 축소
- 역할 권한 관리 페이지 레이아웃을 다른 페이지와 통일
- 메뉴명 스타일 개선 (depth 들여쓰기, └ 기호 적용)
- 상위 메뉴 컬럼 제거로 테이블 간소화
- RolePermissionService에 depth 계산 로직 추가
- pagination.js를 body 끝으로 이동하여 로딩 오류 해결
- 역할 선택 UI를 셀렉트박스에서 버튼 형태로 변경
- 역할 버튼 hover 효과 개선 (선택된 버튼 가독성 향상)

변경된 파일:
- resources/views/partials/header.blade.php: 테넌트 선택 UI 추가
- resources/views/dashboard|menus|users|departments|permissions|roles/index.blade.php: tenant-selector 제거, 여백 축소
- resources/views/layouts/app.blade.php: pagination.js 위치 변경
- app/Services/RolePermissionService.php: depth 계산 로직 추가
- resources/views/role-permissions/: 역할 권한 관리 페이지 개선
- routes/web.php, routes/api.php: 역할 권한 관리 라우트 추가
2025-11-25 15:21:48 +09:00

198 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 역할 권한 관리 기능 구현 - 세션 요약
**작업 일시**: 2025-11-25
**현재 상태**: 코드 작업 완료, 브라우저 테스트 대기
**다음 모델**: Opus 4.5
---
## ✅ 완료된 작업
### 1. RolePermissionService 생성
**파일**: `app/Services/RolePermissionService.php`
**주요 메서드**:
- `getRolePermissionMatrix($roleId, $tenantId)` - 권한 매트릭스 조회
- `togglePermission($roleId, $menuId, $type, $tenantId)` - 권한 토글
- `propagateToChildren($roleId, $menuId, $type, $value, $tenantId)` - 하위 메뉴 권한 전파
- `allowAllPermissions($roleId, $tenantId)` - 모든 권한 허용
- `denyAllPermissions($roleId, $tenantId)` - 모든 권한 거부
- `getMenuTree($tenantId)` - 메뉴 트리 조회
- `hasPermission($roleId, $menuId, $type)` - 권한 확인
**권한 유형**: view, create, update, delete, approve, export, manage
### 2. Controller 생성
**파일**:
- `app/Http/Controllers/RolePermissionController.php` - Blade 뷰
- `app/Http/Controllers/Api/Admin/RolePermissionController.php` - HTMX API
**API 엔드포인트**:
- `GET /api/admin/role-permissions/matrix` - 권한 매트릭스 조회
- `POST /api/admin/role-permissions/toggle` - 권한 토글
- `POST /api/admin/role-permissions/allow-all` - 전체 허용
- `POST /api/admin/role-permissions/deny-all` - 전체 거부
### 3. Blade View 생성
**파일**:
- `resources/views/role-permissions/index.blade.php` - 메인 페이지
- `resources/views/role-permissions/partials/empty-state.blade.php` - 빈 상태
- `resources/views/role-permissions/partials/permission-matrix.blade.php` - 권한 매트릭스 테이블
**UI 구조**:
1. 역할 선택 드롭다운 (왼쪽)
2. 액션 버튼 (전체 허용/거부/초기화) (오른쪽)
3. 권한 매트릭스 테이블 (메뉴 × 권한 유형)
### 4. 라우트 등록
**web.php**:
```php
Route::get('/role-permissions', [RolePermissionController::class, 'index'])
->name('role-permissions.index');
```
**api.php**:
```php
Route::prefix('role-permissions')->name('role-permissions.')->group(function () {
Route::get('/matrix', [RolePermissionController::class, 'getMatrix']);
Route::post('/toggle', [RolePermissionController::class, 'toggle']);
Route::post('/allow-all', [RolePermissionController::class, 'allowAll']);
Route::post('/deny-all', [RolePermissionController::class, 'denyAll']);
});
```
### 5. 사이드바 메뉴 활성화
**파일**: `resources/views/partials/sidebar.blade.php`
- "역할 권한 관리" 메뉴 `href="#"``href="{{ route('role-permissions.index') }}"`로 변경
- 활성 상태 표시 추가
### 6. 문서 업데이트
**파일**: `CURRENT_WORKS.md`
- Phase 4-4-2 작업 내역 추가
---
## ⏳ 남은 작업
### 1. 브라우저 테스트 (최우선)
**테스트 URL**: https://mng.sam.kr/role-permissions
**확인 사항**:
- [ ] 페이지 로딩 (500 에러 없이)
- [ ] 역할 선택 드롭다운 동작
- [ ] 권한 매트릭스 테이블 표시
- [ ] 체크박스 토글 동작 (HTMX)
- [ ] 전체 허용/거부 버튼 동작
- [ ] 하위 메뉴 권한 전파 확인
**예상 오류 및 해결**:
1. **Role 모델 경로 오류**
- 현재: `\App\Models\Role`
- 확인 필요: Role 모델이 실제로 존재하는지
- 해결: 경로 수정 또는 모델 생성
2. **Menu 모델 관계 오류**
- `Menu::with('parent')` 관계 확인
- parent 관계가 정의되어 있는지 확인
3. **HTMX 로딩 안됨**
- layouts/app.blade.php에 HTMX 스크립트 포함 확인
- CSRF 토큰 헤더 설정 확인
### 2. 오류 수정
발견된 오류를 즉시 수정
### 3. Git 커밋
**커밋 메시지 (한글)**:
```
feat: 역할 권한 관리 기능 구현
- RolePermissionService 생성 (권한 매트릭스 조회, 토글, 전체 허용/거부)
- HTMX 기반 실시간 권한 토글
- 계층적 권한 전파 (부모 → 자식 메뉴)
- admin 패널 역할 권한 관리 기능 이식 (Livewire → HTMX)
변경 파일:
- app/Services/RolePermissionService.php (신규)
- app/Http/Controllers/RolePermissionController.php (신규)
- app/Http/Controllers/Api/Admin/RolePermissionController.php (신규)
- resources/views/role-permissions/ (신규)
- routes/web.php, routes/api.php
- resources/views/partials/sidebar.blade.php
- CURRENT_WORKS.md
```
---
## 🔧 기술 스택
- **패턴**: Service-First
- **프론트**: HTMX + Tailwind CSS
- **백엔드**: Plain Laravel (Livewire 없음)
- **권한**: Spatie Permission (role_has_permissions 테이블)
---
## 📊 Admin vs MNG 비교
| 항목 | Admin (Filament) | MNG (구현됨) |
|------|------------------|--------------|
| 프레임워크 | Livewire | HTMX |
| 컴포넌트 | Filament | Tailwind CSS |
| 상태 관리 | wire:model.live | JavaScript |
| 이벤트 | wire:click | hx-post |
| 리렌더링 | Livewire 자동 | HTMX 타겟 |
---
## 🎯 다음 세션 시작 방법
```bash
# 1. Opus 4.5로 새 세션 시작
claude-code chat --model opus-4-5
# 2. 이 파일 읽기
"ROLE_PERMISSION_SESSION_SUMMARY.md 파일 읽어줘"
# 3. 바로 테스트 진행
"브라우저에서 https://mng.sam.kr/role-permissions 테스트해줘"
```
---
## 💡 참고 정보
**DB 스키마**:
- `role_has_permissions` 테이블 (Spatie)
- role_id, permission_id (복합 키)
- `permissions` 테이블
- name 패턴: `menu:{menu_id}.{type}` (예: menu:1.view)
**테넌트 필터링**:
- 세션: `selected_tenant_id`
- 필터링: 메뉴, 권한, 역할 모두 테넌트별 표시
**계층 전파 로직**:
- 부모 메뉴 권한 변경 → 모든 하위 메뉴에 재귀적 적용
- `propagateToChildren()` 메서드 구현됨
---
## 📝 현재 Todo 상태
- [x] RolePermissionService 생성
- [x] RolePermissionController 생성 (Blade)
- [x] Api/Admin/RolePermissionController 생성 (HTMX API)
- [x] Blade View 생성
- [x] 라우트 등록
- [x] 사이드바 메뉴 활성화
- [x] CURRENT_WORKS.md 업데이트
- [ ] 브라우저 테스트 및 오류 수정 ← **다음 작업**
- [ ] Git 커밋
---
**작성일**: 2025-11-25 13:10
**작성자**: Sonnet 4.5
**다음 담당**: Opus 4.5