fix: [menu-sync] import 시 tenant_id를 요청에서 받도록 수정
- import() API가 세션 없이 호출되어 항상 tenant_id=1로 저장되던 버그 수정 - push()에서 현재 선택된 tenant_id를 함께 전송 - importMenu()에 tenant_id 파라미터 추가하여 재귀 호출 시에도 올바른 테넌트 유지
This commit is contained in:
@@ -158,6 +158,7 @@ public function import(Request $request): JsonResponse
|
||||
}
|
||||
|
||||
$validated = $request->validate([
|
||||
'tenant_id' => 'nullable|integer',
|
||||
'menus' => 'required|array',
|
||||
'menus.*.name' => 'required|string|max:100',
|
||||
'menus.*.url' => 'nullable|string|max:255',
|
||||
@@ -168,9 +169,12 @@ public function import(Request $request): JsonResponse
|
||||
'menus.*.children' => 'nullable|array',
|
||||
]);
|
||||
|
||||
// 요청에서 tenant_id를 받으면 사용 (API 호출 시 세션 없으므로 필수)
|
||||
$importTenantId = $validated['tenant_id'] ?? $this->getTenantId();
|
||||
|
||||
$imported = 0;
|
||||
foreach ($validated['menus'] as $menuData) {
|
||||
$this->importMenu($menuData);
|
||||
$this->importMenu($menuData, null, $importTenantId);
|
||||
$imported++;
|
||||
}
|
||||
|
||||
@@ -232,6 +236,7 @@ public function push(Request $request): JsonResponse
|
||||
'X-Menu-Sync-Key' => $env['api_key'],
|
||||
'Accept' => 'application/json',
|
||||
])->timeout(15)->post(rtrim($env['url'], '/').'/menu-sync/import', [
|
||||
'tenant_id' => $this->getTenantId(),
|
||||
'menus' => $menuData,
|
||||
]);
|
||||
|
||||
@@ -683,12 +688,14 @@ private function applyOrder(array $orderMap, int $tenantId, ?int $parentId = nul
|
||||
/**
|
||||
* 메뉴 Import
|
||||
*/
|
||||
private function importMenu(array $data, ?int $parentId = null): void
|
||||
private function importMenu(array $data, ?int $parentId = null, ?int $tenantId = null): void
|
||||
{
|
||||
$tenantId = $tenantId ?? $this->getTenantId();
|
||||
|
||||
// 부모 메뉴 찾기
|
||||
if (! $parentId && ! empty($data['parent_name'])) {
|
||||
$parent = Menu::withoutGlobalScopes()
|
||||
->where('tenant_id', $this->getTenantId())
|
||||
->where('tenant_id', $tenantId)
|
||||
->where('name', $data['parent_name'])
|
||||
->first();
|
||||
$parentId = $parent?->id;
|
||||
@@ -697,7 +704,7 @@ private function importMenu(array $data, ?int $parentId = null): void
|
||||
// name + parent_id로 매칭 (동명 메뉴가 다른 계층에 있을 때 자기참조 방지)
|
||||
$menu = Menu::withoutGlobalScopes()->updateOrCreate(
|
||||
[
|
||||
'tenant_id' => $this->getTenantId(),
|
||||
'tenant_id' => $tenantId,
|
||||
'name' => $data['name'],
|
||||
'parent_id' => $parentId,
|
||||
],
|
||||
@@ -713,7 +720,7 @@ private function importMenu(array $data, ?int $parentId = null): void
|
||||
// 자식 메뉴 처리
|
||||
if (! empty($data['children'])) {
|
||||
foreach ($data['children'] as $child) {
|
||||
$this->importMenu($child, $menu->id);
|
||||
$this->importMenu($child, $menu->id, $tenantId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user