문제 › 096

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가 자동 채점하고 즉시 정답·해설을 알려줘요. 무료.