command->info('코어 관리자 메뉴 생성을 시작합니다.');
// 기존 데이터 삭제
$this->deleteExistingCoreMenus();
// 관리자 사용자 찾기 (첫 번째 사용자를 관리자로 가정)
$admin = User::first();
// 새 데이터 생성
$this->createCoreMenus($admin);
$this->command->info('코어 관리자 메뉴가 성공적으로 생성되었습니다.');
}
/**
* 기존 코어 메뉴를 삭제합니다.
*/
private function deleteExistingCoreMenus(): void
{
$deletedCount = Menu::where('extension_type', ExtensionOwnerType::Core)->delete();
if ($deletedCount > 0) {
$this->command->info("기존 코어 메뉴 {$deletedCount}개가 삭제되었습니다.");
}
}
/**
* 코어 관리자 메뉴를 생성합니다.
* 정의는 config/core.php의 menus에서 읽습니다.
*
* @param User|null $admin 관리자 사용자
*/
private function createCoreMenus(?User $admin): void
{
$coreMenus = config('core.menus');
$createdMenus = [];
foreach ($coreMenus as $menuData) {
$createdMenus[] = Menu::create(array_merge($menuData, [
'extension_type' => ExtensionOwnerType::Core,
'extension_identifier' => 'core',
'created_by' => null,
]));
}
// 관리자 역할에 모든 코어 메뉴 read 권한 부여
$this->grantAdminRoleToMenus($createdMenus);
// 매니저 역할에 대시보드 메뉴 read 권한 부여
$this->grantManagerDashboardMenu($createdMenus);
}
/**
* 관리자 역할에 모든 코어 메뉴의 read 권한을 부여합니다.
*
* @param array