docs:CLAUDE.md 메뉴 관리 규칙 변경 (시더→수동 관리)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
김보곤
2026-02-09 15:22:40 +09:00
parent 4c9daf3633
commit 95ddc6be2a

View File

@@ -174,26 +174,57 @@ # API 앱에서 artisan 명령 실행
docker exec sam-api-1 php artisan <명령어>
```
## 메뉴 관리 (DB 기반)
## 메뉴 관리 (DB 기반) - 수동 관리 필수!
### 메뉴 구조
사이드바 메뉴는 DB에 저장되어 있으며 `MngMenuSeeder`로 관리합니다.
> **경고: 메뉴 시더(Seeder)를 절대 실행하지 마세요!**
### 메뉴 추가/수정 절차 (필수!)
### 배경
사이드바 메뉴는 DB의 `menus` 테이블에 저장됩니다.
메뉴 시더 실행 시 **부서별 권한 설정(permission_overrides)이 초기화**되므로 시더 사용을 금지합니다.
1. **시더 파일 수정**
```
database/seeders/MngMenuSeeder.php
```
### 금지 사항
```
❌ php artisan db:seed --class=MngMenuSeeder 실행 금지
❌ php artisan db:seed --class=*MenuSeeder 실행 금지
❌ 메뉴 시더 파일 생성 금지
❌ 메뉴 데이터를 일괄 삭제 후 재생성하는 방식 금지
```
2. **시더 실행 (Docker)**
```bash
docker exec sam-mng-1 php artisan db:seed --class=MngMenuSeeder
```
### 메뉴 변경 시 올바른 절차
3. **브라우저 새로고침**으로 확인
메뉴 추가/수정/삭제/이동이 필요할 때는 **사용자에게 수동 실행 안내**를 제공합니다:
1. **tinker 명령어를 안내** (사용자가 직접 실행)
2. **또는 SQL 쿼리를 안내** (사용자가 phpMyAdmin 등에서 직접 실행)
3. **절대 시더를 만들어 실행하지 않음**
### 안내 예시
```bash
# 메뉴 추가
ssh sam-server "cd /home/webservice/mng && php artisan tinker --execute=\"
App\\\\Models\\\\Commons\\\\Menu::create([
'tenant_id' => 1,
'parent_id' => <부모ID>,
'name' => '새 메뉴',
'url' => '/new-menu',
'icon' => 'icon-name',
'sort_order' => 1,
'is_active' => true,
]);
\""
# 메뉴 이름 변경
ssh sam-server "cd /home/webservice/mng && php artisan tinker --execute=\"
App\\\\Models\\\\Commons\\\\Menu::withoutGlobalScopes()->find(<ID>)->update(['name' => '새이름']);
\""
# 메뉴 비활성화 (삭제 대신)
ssh sam-server "cd /home/webservice/mng && php artisan tinker --execute=\"
App\\\\Models\\\\Commons\\\\Menu::withoutGlobalScopes()->find(<ID>)->update(['is_active' => false]);
\""
```
### 주의사항
- 시더 실행 시 기존 메뉴(tenant_id=1)가 삭제 후 재생성됨
- 메뉴 코드 수정만으로는 적용 안 됨 → **반드시 시더 실행 필요**
- 라우트(`routes/web.php`)와 컨트롤러도 함께 추가해야 함
- 메뉴 변경 시 라우트(`routes/web.php`)와 컨트롤러도 함께 추가해야 함
- 새 메뉴 추가 후 부서별 권한 설정이 필요하면 사용자에게 안내