perf: 회원가입 쿼리 최적화 (268개 → 58개, 78% 감소)
- MenuObserver: Bulk insert + 지연 캐시 삭제로 메뉴당 28개 → 3개 쿼리 - RegisterService: 중복 권한 생성 로직 제거 (27개 쿼리 감소) - 캐시 삭제: 126개 → 11개 (91% 감소) - 확장성 유지: 관리자 메뉴 추가 시에도 최적화 적용
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user