perf: 회원가입 쿼리 최적화 (268개 → 58개, 78% 감소)

- MenuObserver: Bulk insert + 지연 캐시 삭제로 메뉴당 28개 → 3개 쿼리
- RegisterService: 중복 권한 생성 로직 제거 (27개 쿼리 감소)
- 캐시 삭제: 126개 → 11개 (91% 감소)
- 확장성 유지: 관리자 메뉴 추가 시에도 최적화 적용
This commit is contained in:
2025-11-10 10:30:35 +09:00
parent c558606954
commit 657623fef5
3 changed files with 293 additions and 19 deletions

View File

@@ -85,21 +85,21 @@ public static function register(array $params): array
'description' => '시스템 관리자',
]);
// 8. Create permissions for each menu and assign to role
$permissions = [];
// 8. Get all permissions created by MenuObserver (menu:{id}.{action} pattern)
$permissionNames = [];
$actions = config('authz.menu_actions', ['view', 'create', 'update', 'delete', 'approve']);
foreach ($menuIds as $menuId) {
$permName = "menu.{$menuId}";
// Use firstOrCreate to avoid duplicate permission errors
$perm = Permission::firstOrCreate([
'tenant_id' => $tenant->id,
'guard_name' => 'api',
'name' => $permName,
]);
$permissions[] = $perm;
foreach ($actions as $action) {
$permissionNames[] = "menu:{$menuId}.{$action}";
}
}
$permissions = Permission::whereIn('name', $permissionNames)
->where('tenant_id', $tenant->id)
->where('guard_name', 'api')
->get();
// 9. Assign all menu permissions to system_manager role
$role->syncPermissions($permissions);