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 사이)
역할 확인 메서드
$user->isPlatformAdmin(); // Level 0인지
$user->isSaasAdmin(); // Level 0-1인지
$user->isTenantAdmin(); // Level 0-2인지
$user->isOrgAdmin(); // Level 0-3인지
$user->isWorkspaceAdmin(); // Level 0-4인지
$user->isGroupLeader(); // Level 0-5인지
사용자 관리 권한 확인
// 대상 사용자를 관리할 수 있는지
$admin = User::where('level', 2)->first(); // Tenant Admin
$member = User::where('level', 6)->first(); // Member
$admin->canManageUser($member); // true (하위 레벨)
$member->canManageUser($admin); // false (상위 레벨)
테넌트 격리 우회
// 테넌트 격리 우회 가능한지 (Level 0-1)
$user->canBypassTenantIsolation();
쿼리 스코프
// 특정 레벨 사용자만 조회
User::withLevel(UserLevel::MEMBER)->get();
// 특정 레벨 이상 (더 높은 권한)
User::withLevelOrAbove(UserLevel::TENANT_ADMIN)->get(); // Level 0-2
// 특정 레벨 이하 (더 낮은 권한)
User::withLevelOrBelow(UserLevel::GROUP_LEADER)->get(); // Level 5-6
PermissionService
권한 검증 로직을 캡슐화한 서비스입니다.
의존성 주입
use App\Core\Base\Permission\Contracts\PermissionServiceInterface;
class UserController extends Controller
{
public function __construct(
private PermissionServiceInterface $permissionService
) {}
}