fix: [tenant-console] 테넌트 콘솔 분리작업

- 라우트 파라미터 충돌 수정 (Layer 4 확장)
- TenantScope 글로벌 스코프가 테넌트 콘솔에서 올바른 tenant_id 사용하도록 수정
- 감사로그 상세 테넌트 콘솔 레이아웃 적용
- 테넌트 전환: 모달 → 컨텍스트 메뉴로 이동, 스타일 변경 (녹색+전환아이콘)
- 테넌트 전환 이벤트를 openTenantConsole 호출로 통일
- 사이드바 스타일 메인과 통일 + 리포트 주의사항 정리
This commit is contained in:
2026-03-12 18:58:34 +09:00
parent a077bd5710
commit 8da1702e47
71 changed files with 1179 additions and 429 deletions

View File

@@ -2,6 +2,7 @@
namespace App\Services;
use App\Helpers\TenantHelper;
use App\Models\Boards\Board;
use App\Models\Boards\BoardSetting;
use App\Models\Tenants\Tenant;
@@ -101,9 +102,14 @@ public function getBoardById(int $id, bool $withTrashed = false, bool $systemOnl
*/
public function createBoard(array $data): Board
{
// 시스템 게시판 설정
$data['is_system'] = true;
$data['tenant_id'] = null;
// 테넌트 콘솔이면 테넌트 게시판, 아니면 시스템 게시판
if (TenantHelper::isTenantConsole()) {
$data['is_system'] = false;
$data['tenant_id'] = TenantHelper::getEffectiveTenantId();
} else {
$data['is_system'] = true;
$data['tenant_id'] = null;
}
$data['created_by'] = auth()->id();
$board = Board::create($data);
@@ -283,11 +289,15 @@ public function reorderBoardFields(int $boardId, array $fieldIds): bool
*/
public function getBoardTypes(): array
{
return Board::systemOnly()
->whereNotNull('board_type')
->distinct()
->pluck('board_type')
->toArray();
$query = Board::query()->whereNotNull('board_type');
if (TenantHelper::isTenantConsole()) {
$query->where('tenant_id', TenantHelper::getEffectiveTenantId());
} else {
$query->systemOnly();
}
return $query->distinct()->pluck('board_type')->toArray();
}
// =========================================================================
@@ -411,28 +421,37 @@ public function getAllBoards(array $filters = [], int $perPage = 15): LengthAwar
->withCount(['fields', 'posts'])
->withTrashed();
// 헤더에서 선택한 테넌트 기준
$selectedTenantId = session('selected_tenant_id');
if ($selectedTenantId && $selectedTenantId !== 'all') {
// 선택된 테넌트가 본사(HQ)인지 확인
$isHQ = Tenant::where('id', $selectedTenantId)
->where('tenant_type', 'HQ')
->exists();
if ($isHQ) {
// 본사: 시스템 게시판 + 본사 테넌트 게시판
$query->where(function ($q) use ($selectedTenantId) {
$q->where('is_system', true)
->orWhere('tenant_id', $selectedTenantId);
});
} else {
// 일반 테넌트: 해당 테넌트 게시판만 (시스템 게시판 제외)
$query->where('tenant_id', $selectedTenantId);
}
// 명시적 tenant_id 필터 (테넌트 콘솔 API 호출에서 전달)
if (! empty($filters['tenant_id'])) {
$query->where('tenant_id', $filters['tenant_id']);
} elseif (TenantHelper::isTenantConsole()) {
// 테넌트 콘솔인 경우: 해당 테넌트 게시판만
$consoleTenantId = TenantHelper::getEffectiveTenantId();
$query->where('tenant_id', $consoleTenantId);
} else {
// 전체 보기: 시스템 게시판만 (테넌트 게시판은 테넌트 선택 후 표시)
$query->where('is_system', true);
// 메인 관리자: 헤더에서 선택한 테넌트 기준
$selectedTenantId = TenantHelper::getRawTenantId();
if ($selectedTenantId && $selectedTenantId !== 'all') {
// 선택된 테넌트가 본사(HQ)인지 확인
$isHQ = Tenant::where('id', $selectedTenantId)
->where('tenant_type', 'HQ')
->exists();
if ($isHQ) {
// 본사: 시스템 게시판 + 본사 테넌트 게시판
$query->where(function ($q) use ($selectedTenantId) {
$q->where('is_system', true)
->orWhere('tenant_id', $selectedTenantId);
});
} else {
// 일반 테넌트: 해당 테넌트 게시판만 (시스템 게시판 제외)
$query->where('tenant_id', $selectedTenantId);
}
} else {
// 전체 보기: 시스템 게시판만 (테넌트 게시판은 테넌트 선택 후 표시)
$query->where('is_system', true);
}
}
// 검색 필터