Impersonate 확장
📝 초안 (Draft)
이 문서는 검토 중입니다. 내용이 변경될 수 있습니다.
사용자 전환(Impersonation) 기능을 제공하는 Core Extension입니다.
개요
Impersonate 확장은 상위 관리자가 하위 사용자로 전환하여 지원/디버깅을 수행할 수 있게 합니다. 모든 전환 세션은 감사 로그로 기록되어 보안과 추적성을 보장합니다.
┌─────────────────────────────────────────────────────────────┐
│ Impersonate Extension │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Impersonator │ ─────► │ Target │ │
│ │ (관리자) │ 전환 │ (사용자) │ │
│ └─────────────────┘ └─────────────────┘ │
│ │
│ 기능: │
│ • 권한 기반 전환: 상위 레벨만 하위 레벨 impersonate 가능 │
│ • 테넌트 격리: 같은 테넌트 내에서만 가능 (Platform 제외) │
│ • 감사 로깅: 모든 세션 자동 기록 │
│ • 세션 타임아웃: 설정된 시간 후 자동 만료 │
└─────────────────────────────────────────────────────────────┘
활성화
Impersonate는 선택적 확장 모듈로, 필요한 프로젝트에서만 활성화합니다.
# .env
CORE_IMPERSONATE_ENABLED=true
CORE_IMPERSONATE_TIMEOUT=60 # 세션 타임아웃 (분)
CORE_IMPERSONATE_LOG_RETENTION=365 # 로그 보존 기간 (일)
// config/core.php
'impersonate' => [
'enabled' => env('CORE_IMPERSONATE_ENABLED', false),
'session_timeout' => env('CORE_IMPERSONATE_TIMEOUT', 60),
'log_retention_days' => env('CORE_IMPERSONATE_LOG_RETENTION', 365),
'allowed_levels' => [0, 1, 2], // Impersonate 기능 사용 가능 레벨
'require_reason' => true, // 이유 입력 필수 여부
],
구조
packages/core/Extensions/Impersonate/
├── Contracts/
│ ├── ImpersonatableInterface.php # 전환 대상 인터페이스
│ ├── ImpersonateServiceInterface.php # 서비스 인터페이스
│ └── ImpersonatorInterface.php # 전환자 인터페이스
├── Enums/
│ ├── ImpersonationReason.php # support, debugging, training, ...
│ └── ImpersonationStatus.php # active, ended, expired
├── Events/
│ ├── ImpersonationStarted.php
│ └── ImpersonationEnded.php
├── Exceptions/
│ ├── CannotImpersonateException.php