096. 권한 관리 시스템
Hard
바이브코딩
MCPAuthRBAC
문제 설명
[문제]
역할 기반 접근 제어(RBAC) 권한 관리 MCP 서버를 구현한다. RBAC란 권한(permission)을 사용자에게 직접 주는 대신 "역할(role)"에 묶어 두고, 사용자에게는 역할을 부여하는 방식이다. 예를 들어 "admin" 역할에 ["edit", "delete"] 권한을 담아 두고 사용자 u1에게 admin 역할을 주면, u1은 edit·delete 권한을 자동으로 갖게 된다.
서버는 두 가지 상태를 유지한다.
- 역할 -> 권한 목록 매핑 (예: {"admin": ["edit", "delete"]})
- 사용자 -> 보유 역할 목록 매핑 (예: {"u1": ["admin"]})
서버 시작 시 두 매핑 모두 비어 있다.
[구현할 함수]
- create_role(role_name: str) -> int
새 역할을 권한이 빈 상태로 생성한다. 생성 후 전체 역할의 개수를 반환한다.
- assign_role(user_id: str, role_name: str) -> bool
사용자에게 역할을 부여한다. 해당 역할이 존재하면 부여하고 True, 존재하지 않으면 부여하지 않고 False를 반환한다.
- check_permission(user_id: str, permission: str) -> bool
사용자가 보유한 역할 중 하나라도 해당 권한을 가지고 있으면 True, 아니면 False를 반환한다.
- list_roles() -> 문자열 배열
생성된 모든 역할 이름의 배열을 반환한다. 없으면 빈 배열.
[입력·상태]
역할 이름·사용자 ID·권한 이름은 모두 문자열이다. 상태는 서버 인스턴스에 누적되며 호출 간에 유지된다.
[제약]
- 존재하지 않는 역할을 사용자에게 부여하려 하면 False를 반환하고 상태를 바꾸지 않는다.
- 어떤 역할도 보유하지 않은 사용자에 대한 권한 확인은 항상 False다.
[예시]
create_role("admin") -> 1
list_roles() -> ["admin"]
create_role("admin") 후 assign_role("u1", "admin") -> true
(빈 상태) assign_role("u1", "없음") -> false # 역할 미존재
(빈 상태) check_permission("u1", "edit") -> false # 역할 없음
(빈 상태) list_roles() -> []
로그인하고 풀기
AI가 자동 채점하고 즉시 정답·해설을 알려줘요. 무료.