데브허브 | DEVHUB | Access Management System - Low Level Design Interview QuestionAccess Management System - Low Level Design Interview Question
- 역할 기반 접근 제어(RBAC) 시스템 설계는 사용자, 역할, 권한 세 가지 핵심 엔티티를 중심으로 합니다. 🛡️
- 각 역할은 고유한 이름을 가지며 여러 권한을 포함할 수 있고, 사용자는 여러 역할을 가질 수 있습니다. 👥
- 핵심 기능은 역할 생성, 역할에 권한 부여, 사용자에게 역할 할당/회수, 사용자의 특정 권한 보유 여부 확인입니다. ⚙️
- 효율적인 O(1) 조회를 위해 역할 이름-역할 객체 매핑 및 사용자 ID-역할 세트 매핑에 해시맵을 사용하고, 각 역할의 권한 목록에는 해시셋을 활용합니다. ⚡
Role 클래스에 dataclass 데코레이터를 사용하여 선언적으로 정의하고, 내부 _get_role 메서드로 역할 유효성 검사를 중앙 집중화하여 API를 깔끔하게 유지합니다. 🛠️
has_permission 메서드는 사용자가 가진 역할들을 순회하며 해당 권한이 있는지 확인합니다. ✅
has_permission 메서드의 시간 복잡도는 사용자가 가진 역할 수에 비례하는 O(R)이며, 나머지 모든 메서드는 해시맵/해시셋 덕분에 O(1)입니다. ⏱️
- 공간 복잡도는 총 역할 수, 모든 역할에 걸친 총 권한 수, 총 사용자-역할 할당 수의 합으로 표현됩니다. 💾
- 이 설계는 효율적인 데이터 구조를 활용하여 복잡한 접근 관리 시스템을 명확하고 간결하게 구현하는 방법을 제시합니다. ✨