docs:CLAUDE.md 메뉴 관리 규칙 변경 (시더→수동 관리)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
63
CLAUDE.md
63
CLAUDE.md
@@ -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`)와 컨트롤러도 함께 추가해야 함
|
||||
- 새 메뉴 추가 후 부서별 권한 설정이 필요하면 사용자에게 안내
|
||||
|
||||
Reference in New Issue
Block a user