Files
jongryangje/app/Config/Roles.php
taekyoungc ab40a90f69 feat: 기본코드 bag 목록과 관리자 CRUD 분리
- /bag/code-kinds, /bag/code-details/{ck_idx} 조회 (LoginAuthFilter, Roles::canManageCodeMaster)
- admin에서는 종류·세부 목록 제거, 등록·수정·삭제만 유지 후 bag으로 리다이렉트
- 사이트 메뉴·기본코드 링크 SQL, CSV 동기화 스크립트·README 보강
- 관리자 대시보드: 발주·판매 테이블 미존재 시 통계 비활성화
- 회원 로그인 잠금(mb_login_fail_count, mb_locked_until) 및 관리자 잠금 해제

Made-with: Cursor
2026-03-30 15:07:09 +09:00

84 lines
2.5 KiB
PHP

<?php
namespace Config;
use CodeIgniter\Config\BaseConfig;
/**
* 사용자 역할(mb_level) 코드 매핑
*
* Phase 2 메뉴·권한 제어 시 config('Roles')로 참조
*/
class Roles extends BaseConfig
{
/**
* mb_level 상수 (member.mb_level)
*/
public const LEVEL_SUPER_ADMIN = 4;
/** 본부 관리자 — 현재는 super admin과 동일한 관리자 권한(지자체 선택 후 작업). 추후 super 전용 기능 분리 시 여기만 조정 */
public const LEVEL_HEADQUARTERS_ADMIN = 5;
public const LEVEL_LOCAL_ADMIN = 3; // 지자체관리자
public const LEVEL_SHOP = 2; // 지정판매소
public const LEVEL_CITIZEN = 1; // 일반 사용자(시민)
/**
* mb_level → 한글명 매핑
*
* @var array<int, string>
*/
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·본부 관리자)
*/
public static function canManageCodeMaster(int $level): bool
{
return $level === self::LEVEL_LOCAL_ADMIN || self::isSuperAdminEquivalent($level);
}
/**
* 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] ?? '알 수 없음';
}
}