본문으로 건너뛰기

Platform 패널 (Level 0)

📝 초안 (Draft)

이 문서는 검토 중입니다. 내용이 변경될 수 있습니다.

Platform Admin 전용 패널 기능을 설명합니다.

개요

Platform 패널은 **권한 시스템 (Level 0~6, ADR-058)의 최상위 레벨(Level 0)**을 위한 관리 패널입니다. 플랫폼 전체를 관리하며, SaaS 제품 생성/관리, 전체 사용자 관리, 시스템 설정 등의 기능을 제공합니다.

접근 권한

항목
권한 레벨Level 0 (Platform Admin)
기본 경로/platform
환경변수PANEL_PATH_PLATFORM
접근 가능자Level 0만
보안 권장

프로덕션 환경에서는 예측하기 어려운 경로를 사용하세요:

PANEL_PATH_PLATFORM=ops-x7k9m2

주요 기능

1. SaaS 제품 관리

Multi-SaaS Kit은 하나의 플랫폼에서 여러 SaaS 제품을 운영할 수 있습니다. Platform 패널에서 각 SaaS 제품을 생성하고 관리합니다.

Platform
├── SaaS Product A (LMS)
│ ├── Tenant 1 (학원 A)
│ └── Tenant 2 (학원 B)

└── SaaS Product B (CRM)
├── Tenant 3 (회사 A)
└── Tenant 4 (회사 B)

SaasProductResource 주요 필드:

필드설명예시
nameSaaS 제품명"온라인 학습 플랫폼"
slugURL 식별자"lms"
description제품 설명"학원 관리 시스템"
logo_url로고 이미지 URL"https://..."
is_active활성화 여부true/false
level_labels계층 이름 커스터마이징Level 2→"학원장", Level 3→"캠퍼스"
settings제품별 커스텀 설정JSON

2. Tenant Domains & Sites

Platform Admin은 Tenant Domains & Sites 메뉴에서 Tenant별 도메인과 사이트 분리 설정을 확인하고 수정합니다.

항목필드설명
대표 도메인primary_domainTenant의 기본 도메인
별칭 도메인domain_aliases같은 Tenant로 연결되는 추가 도메인
서브도메인 매핑subdomain_mapping서브도메인별 level/panel 라우팅 규칙
미러사이트settings.custom_theme같은 작업영역에서 Blade/브랜딩만 오버레이
독립사이트settings.siteapp/Sites/{StudlyName} 기반 독립 작업영역
Legacy 도메인settings.domains기존 settings 기반 도메인 목록

MSK에서는 settings.custom_theme 기반 오버레이를 미러사이트, settings.site 기반 작업영역 분리를 독립사이트라고 부릅니다.

3. Help Pages

Help Pages 메뉴는 Platform Admin이 관리페이지별 안내 문구를 직접 편집하는 시스템입니다.

필드설명
panel도움말이 적용될 패널. 예: platform
page_key페이지/기능 키. 예: tenant-domains.index
summary페이지 제목 아래 설명
guide_body목록 상단 안내
modal_body? 모달 매뉴얼
visible_levels도움말 공개 대상 level

Tenant Domains & Sites의 기본 도움말 키는 platform / tenant-domains.index입니다.

범용 UX 기능

기능설명
패널간 네비게이션우상단 메뉴에서 SaaS 패널로 이동
brandName"Platform Admin" 좌상단 표시
SafeDeleteAction모든 삭제에 "DELETE {대상명}" 입력 확인
Tenant 관리 페이지 이동Tenant 목록에서 바로 Tenant 패널로 이동
로그인 리다이렉트/dashboard → Level 0은 Platform으로 자동 이동

4. 계층 이름 커스터마이징

각 SaaS 제품은 도메인에 맞게 계층 이름을 커스터마이징할 수 있습니다.

Level기본값LMS 예시CRM 예시
2Tenant Admin학원장고객사 관리자
3Organization Admin캠퍼스장부서장
4Workspace Admin담당자팀장
5Group Leader담임파트장
6Member학생영업사원
Level 0, 1은 고정

Level 0 (Platform Admin)과 Level 1 (SaaS Admin)은 시스템 고정값으로 변경할 수 없습니다.

5. SaaS Admin 관리

각 SaaS 제품에 대한 **Level 1 관리자(SaaS Admin)**를 생성하고 관리합니다.

SaasAdminResource 기능:

  • SaaS Admin 계정 생성/수정/삭제
  • 담당 SaaS 제품 배정
  • Impersonate 액션 (SaaS Admin으로 전환)

6. Plugin 매트릭스 UI (v1.25.0+)

Platform Admin 이 SaaS×Plugin 매트릭스를 토글하여 Plugin 활성화/비활성화를 관리합니다. 추가: 2026-05-05 (demo 1.7.2 → template 1.25.0 sync)

Platform → SaaS 매트릭스

Platform → System → SaaS Plugins 메뉴에서 모든 application plugin (manifest.kind=application) 의 SaaS 별 활성화 상태를 한눈에 관리.

기능설명
자동 발견manifest.kind=application plugin 만 컬럼으로 노출 (slug kebab-case)
상호 배타 처리manifest.scope.mutually_exclusive 플러그인 동시 활성화 차단 (예: Commerce + LunarCommerce)
즉시 반영토글 시 saas_plugins 테이블 업데이트 + 캐시 무효화
전이 검증의존성 plugin 비활성화 시 의존하는 plugin 자동 비활성화 안내

SaaS Admin → Tenant 매트릭스

SaaS → System → Tenant Plugins 메뉴에서 자기 SaaS 의 tenant 별로 plugin 활성화 (SaaS Admin 권한 한정).

기능설명
2계층 활성화SaaS 매트릭스에서 ON 된 plugin 만 tenant 매트릭스에 노출
Tenant overridetenant 별 plugin on/off 가능 (SaaS Admin 권한 내)

EnsurePluginActive middleware

비활성화된 plugin 의 라우트 접근 시 자동 404 반환:

Route::middleware(['plugin.active:my-plugin'])->group(function () {
// ...
});

core_plugins.is_enabled = false 면 즉시 404. UI 메뉴는 shouldRegisterNavigation 으로 자동 숨김.

7. 전체 감사 로그

플랫폼 전체의 감사 로그를 조회할 수 있습니다.

AuditLogResource 컬럼:

컬럼설명
user액션 수행자
action수행 액션 (created, updated, deleted)
model대상 모델
changes변경 내용 (old → new)
ip_addressIP 주소
created_at발생 시간

파일 구조

app/Filament/Platform/
├── Resources/
│ ├── SaasProductResource.php
│ │ └── Pages/
│ │ ├── ListSaasProducts.php
│ │ ├── CreateSaasProduct.php
│ │ └── EditSaasProduct.php
│ │
│ ├── SaasAdminResource.php
│ │ └── Pages/
│ │ ├── ListSaasAdmins.php
│ │ ├── CreateSaasAdmin.php
│ │ └── EditSaasAdmin.php
│ │
│ ├── TenantDomainResource.php
│ │ └── Pages/
│ │ ├── ListTenantDomains.php
│ │ └── EditTenantDomain.php
│ │
│ ├── AdminHelpPageResource.php
│ │ └── Pages/
│ │ ├── ListAdminHelpPages.php
│ │ ├── CreateAdminHelpPage.php
│ │ └── EditAdminHelpPage.php
│ │
│ └── AuditLogResource.php
│ └── Pages/
│ ├── ListAuditLogs.php
│ └── ViewAuditLog.php

├── Pages/
│ └── Dashboard.php

└── Widgets/
└── StatsOverviewWidget.php

PanelProvider 설정

// app/Providers/Filament/PlatformPanelProvider.php

class PlatformPanelProvider extends PanelProvider
{
public function panel(Panel $panel): Panel
{
return $panel
->id('platform')
->path(env('PANEL_PATH_PLATFORM', 'platform'))
->login()
->colors(['primary' => Color::Red])
->discoverResources(
in: app_path('Filament/Platform/Resources'),
for: 'App\Filament\Platform\Resources'
)
->middleware([
EncryptCookies::class,
AddQueuedCookiesToResponse::class,
StartSession::class,
AuthenticateSession::class,
ShareErrorsFromSession::class,
VerifyCsrfToken::class,
SubstituteBindings::class,
])
->authMiddleware([
Authenticate::class,
EnsureUserLevel::class.':0', // Level 0만 접근
]);
}
}

Impersonate 기능

Platform Admin은 SaaS Admin으로 전환하여 해당 사용자 시점에서 시스템을 확인할 수 있습니다.

// SaasAdminResource.php
use App\Core\Extensions\Impersonate\Filament\Actions\ImpersonateAction;

public static function table(Table $table): Table
{
return $table
->columns([...])
->recordActions([
ImpersonateAction::make(), // Impersonate 액션
EditAction::make(),
]);
}

Impersonate 규칙:

  • Level 0은 Level 1-6 모두 전환 가능
  • 전환 사유 선택 필수 (support, debugging, training, audit, other)
  • 모든 전환 기록은 impersonation_logs 테이블에 저장

관련 문서