Permission 모듈
📝 초안 (Draft)
이 문서는 검토 중입니다. 내용이 변경될 수 있습니다.
권한 시스템 (Level 0~6, ADR-058) Core 모듈의 상세 사용법입니다.
개요
Permission 모듈은 Multi-SaaS Kit의 **권한 시스템 (Level 0~6, ADR-058)**을 구현합니다. 숫자가 낮을수록 높은 권한을 가지며, 상위 권한은 하위 권한을 포함합니다.
packages/core/Base/Permission/
├── Contracts/
│ └── PermissionServiceInterface.php
├── Enums/
│ └── UserLevel.php # 권한 분류 (Level 0~6) Enum
├── Middleware/
│ └── EnsureUserLevel.php # 라우트 권한 체크
├── Policies/
│ ├── UserPolicy.php # User CRUD 권한
│ └── TenantOwnedPolicy.php # 테넌트 소유 모델
├── Services/
│ └── PermissionService.php # 권한 검증 서비스
└── Traits/
└ ── HasLevel.php # User 모델 Trait
UserLevel Enum
권한 레벨을 정의하는 Enum입니다.
namespace App\Core\Base\Permission\Enums;
enum UserLevel: int
{
case PLATFORM_ADMIN = 0; // 플랫폼 운영자
case SAAS_ADMIN = 1; // SaaS 서비스 관리자
case TENANT_ADMIN = 2; // 테넌트(고객사) 관리자
case ORGANIZATION_ADMIN = 3; // 조직/부서 관리자
case WORKSPACE_ADMIN = 4; // 프로젝트/작업공간 관리자
case GROUP_LEADER = 5; // 팀/그룹 리더
case MEMBER = 6; // 일반 멤버
}
Enum 메서드
use App\Core\Base\Permission\Enums\UserLevel;
// 레벨 값 가져오기
UserLevel::TENANT_ADMIN->value; // 2
// 레벨 라벨 가져오기
UserLevel::TENANT_ADMIN->label(); // "Tenant Admin"
// 값으로 Enum 생성
UserLevel::tryFromValue(2); // UserLevel::TENANT_ADMIN
// 플랫폼 레벨 여부 (0-1)
UserLevel::TENANT_ADMIN->isPlatformLevel(); // false
// 테넌트 레벨 여부 (2-6)
UserLevel::TENANT_ADMIN->isTenantLevel(); // true
// 테넌트 격리 우회 가능 여부
UserLevel::SAAS_ADMIN->canBypassTenantIsolation(); // true
HasLevel Trait
User 모델에 적용하여 권한 분류 (Level 0~6) 기능을 추가합니다.
적용 방법
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
use App\Core\Base\Permission\Traits\HasLevel;
use App\Core\Contracts\UserInterface;
class User extends Authenticatable implements UserInterface
{
use HasLevel;
protected $fillable = [
'name', 'email', 'password', 'level', 'tenant_id',
];
protected $casts = [
'level' => 'integer',
];
}
권한 확인 메서드
$user = auth()->user();
// 현재 레벨 가져오기
$user->getLevel(); // int: 2
$user->getUserLevel(); // UserLevel::TENANT_ADMIN
$user->getLevelLabel(); // "Tenant Admin"
// 최소 레벨 확인 (숫자가 작거나 같으면 true)
$user->hasLevelAtLeast(UserLevel::TENANT_ADMIN); // true
$user->hasLevelAtLeast(UserLevel::SAAS_ADMIN); // false
// 정확한 레벨 확인
$user->hasLevelExact(UserLevel::TENANT_ADMIN); // true
// 범위 확인
$user->hasLevelBetween(
UserLevel::TENANT_ADMIN, // min
UserLevel::GROUP_LEADER // max
); // true (Level 2-5 사이)