이 계획은 최고 관리자가 각 테넌트별 설정(로고, SEO, 소셜링크)과 디자인(템플릿, 메인 레이아웃)을 완벽하게 개별 관리할 수 있도록 구조를 개선하고, 일반 테넌트와 회원이 꼬이지 않도록 권한을 명확히 분리하는 것을 목표로 합니다.

흐름 요약 (User Workflow)

  1. 일반인 회원가입 및 테넌트 신청
  2. 최고 관리자의 테넌트 개설: 최고 관리자가 어드민에서 테넌트 ID(handle)와 사이트명 등을 입력하여 테넌트를 개설. 이때 꼬임 방지를 위해 완벽히 독립된 기본 설정값(로고, SEO, 디자인 기본값 등)이 해당 테넌트 전용으로 자동 세팅됨.
  3. 일반 테넌트 마이페이지: 테넌트 소유자는 자신의 "마이페이지"에 접속하여 본인의 기본 정보, 템플릿 변경 및 자신의 테넌트에 가입한 회원 관리를 독립적으로 수행.

Proposed Changes

1. 최고 관리자용: 테넌트 개설 및 통합 관리

[MODIFY]  src/Controllers/TenantAdminController.php

  • 테넌트 개설 ( tenantCreate  /  tenantStore ):
    • 신규 테넌트 생성 기능 추가.
    • 생성 시 대상 테넌트 ID를 강제로 할당하여 기본  tenant_settings  (초기 로고, 폰트 등) 및 기본  templates  레코드 5종을 독립적으로 DB에 복사/생성.
  • 테넌트 수정 ( tenantEdit($id) ):
    • 기존 기본 정보뿐만 아니라 대상 테넌트의 템플릿, 슬라이드, 배너, 설정 정보( TenantSetting )를 모두 불러와서 View에 전달.
  • 테넌트 전용 저장 로직 추가 (접속 중인 세션 테넌트가 아닌,  $id  테넌트 DB만 수정하도록  $targetTenantId  사용):
    • tenantUpdateSettings($id) : 대상 테넌트의 로고, SEO, 소셜링크 저장
    • tenantUpdateMainLayout($id) : 대상 테넌트의 메인 레이아웃 저장
    • tenantApplyTemplate($id)  /  tenantSaveTemplateSettings($id) : 대상 테넌트의 템플릿 적용 및 설정 저장

[MODIFY]  templates/admin/tenant_edit.php  (최고 관리자용)

  • 탭 인터페이스 도입:
    1. 기본 정보
    2. 템플릿 관리
    3. 메인 레이아웃 관리
    4. 로고 관리
    5. SEO 설정
    6. 소셜 링크
  • 각 폼 제출 시 대상 테넌트 ID가 명시된 엔드포인트( .../admin/tenants/update_settings/<?= $targetTenant['id'] ?> )를 호출하여 세션 충돌 원천 차단.

2. 일반 테넌트용: 독립된 마이페이지

[NEW]  src/Controllers/MyPageController.php  (또는 기존 로직 마이페이지화)

  • 일반 테넌트(Level < 10)는 기존의 방대한 "환경설정", "디자인 관리" 메뉴 대신, 자신의 테넌트에 종속된 마이페이지 기능만 사용.
  • 마이페이지 구성 요소:
    • 기본정보 수정
    • 템플릿 변경 (최고 관리자가 세팅해둔 기본 템플릿 목록 중 선택)
    • 회원 관리 ( users  테이블에서  tenant_id  가 본인 테넌트인 회원만 조회/관리)
  • 일반 테넌트가 설정이나 회원을 수정할 때는 기존처럼 보안이 확보된  Tenant::getId()  기반 쿼리를 사용해 타 테넌트 데이터 침범을 100% 방지.

3. Core Models & Database 독립성 강화

  • BaseModel  혹은 컨트롤러 단에서 최고 관리자가 대리 수정할 수 있도록 임시적으로 타겟 테넌트 ID( $targetTenantId )를 바인딩할 수 있는 인터페이스 지원.
  • 일반 사용자가 회원가입 시 현재 접속 중인 테넌트의 URL 도메인/경로(handle)에 해당하는  tenant_id 를 소속으로 가지게 되어 회원 관리 시 철저히 분리됨 (이미 일부 구현되어 있음).

Verification Plan

Automated / Manual Verification

  1. 최고 관리자 계정으로 테넌트 관리 메뉴에 진입하여 신규 테넌트(A)를 개설합니다 (기본 설정 자동 생성 확인).
  2. 개설된 테넌트(A) 관리 페이지( admin/tenants/edit/A )에서 로고, SEO, 메인 레이아웃을 수정하고 저장합니다.
  3. 최고 관리자 자신이 속한 메인 테넌트(B)의 설정은 전혀 변함이 없고, 오직 A 테넌트 사이트에만 적용되었는지 확인하여 꼬임 현상이 없음을 검증합니다.
  4. 일반 테넌트(A의 소유자)로 로그인하여 마이페이지에 접속, 템플릿을 변경하고 테넌트(A)에 가입한 회원이 정상적으로 회원관리에 노출되는지 확인합니다.