*/ public array $levelNames = [ self::LEVEL_CITIZEN => '일반 사용자', self::LEVEL_SHOP => '지정판매소', self::LEVEL_LOCAL_ADMIN => '지자체관리자', self::LEVEL_SUPER_ADMIN => 'super admin', self::LEVEL_HEADQUARTERS_ADMIN => '본부 관리자', ]; /** * super admin(4) 또는 본부 관리자(5) — 동일 관리자 UX(지자체 선택 등)에 사용 */ public static function isSuperAdminEquivalent(int $level): bool { return $level === self::LEVEL_SUPER_ADMIN || $level === self::LEVEL_HEADQUARTERS_ADMIN; } /** * 기본코드(종류·세부) 등록·수정·삭제 가능 (super admin(4) · 본부 관리자(5)만) */ public static function canManageCodeMaster(int $level): bool { return self::isSuperAdminEquivalent($level); } /** * 기본코드 종류(code_kind) CRUD — super·본부만 */ public static function canManageCodeKindMaster(int $level): bool { return self::isSuperAdminEquivalent($level); } /** * 플랫폼 공통 세부코드(CSV·시드) 수정·삭제 — super·본부만 */ public static function canEditPlatformCodeDetail(int $level): bool { return self::isSuperAdminEquivalent($level); } /** * 세부코드 행 단위 수정/삭제 가능 여부 * * @param object $row code_detail (cd_source, cd_lg_idx) */ public static function canEditCodeDetailRow(int $level, object $row, ?int $adminEffectiveLgIdx): bool { if (! self::canManageCodeMaster($level)) { return false; } $src = $row->cd_source ?? 'platform'; $lg = (int) ($row->cd_lg_idx ?? 0); if ($src === 'platform' && $lg === 0) { return self::canEditPlatformCodeDetail($level); } if (self::isSuperAdminEquivalent($level)) { return true; } return $adminEffectiveLgIdx !== null && $adminEffectiveLgIdx > 0 && $lg === $adminEffectiveLgIdx; } /** * TOTP 2차 인증 적용 대상 (지자체·super·본부 관리자) */ public static function requiresTotp(int $level): bool { return $level === self::LEVEL_LOCAL_ADMIN || $level === self::LEVEL_SUPER_ADMIN || $level === self::LEVEL_HEADQUARTERS_ADMIN; } /** * 자체 회원가입 시 기본 역할 (mb_level) */ public int $defaultLevelForSelfRegister = self::LEVEL_CITIZEN; /** * mb_level 유효 여부 */ public function isValidLevel(int $level): bool { return isset($this->levelNames[$level]); } /** * mb_level 한글명 반환 */ public function getLevelName(int $level): string { return $this->levelNames[$level] ?? '알 수 없음'; } }