Skip to content

[BE][RBAC] Team API 라우터 정리 및 비활성화 엔드포인트 복구 #92

Description

@HyungminYoon1

목표

현재 등록된 apps/gateway/api/v1/endpoints/team.py와 미등록 teams.py가 서로 다른 /teams 구현을 갖고 있어 Team 관리 API의 유지보수 경계가 불명확하다. 문서 기준에 맞춰 등록 라우터를 정리하고 누락된 team 비활성화 API를 복구한다.

배경

문서 기준:

  • docs/architecture/auth-rbac.md: Controller가 resource permission 비즈니스 규칙을 소유하지 않는다.
  • docs/requirements/mvp-1-foundation-llmops.md: Team/member management 범위에 team 생성, member 추가/제거, team 비활성화가 포함된다.
  • docs/api/organization-rbac.md: Team/member API는 X-Organization-Id active organization scope와 organization manager 권한을 사용한다.

현재 상태:

  • 실제 등록 라우터는 team.py다.
  • 미등록 teams.py에도 별도 /teams 구현이 남아 있다.
  • TeamService.deactivate_team()은 있지만 등록된 team.py에는 DELETE /api/v1/teams/{team_id}가 없다.
  • team.py가 owner/manager 판정, active membership 판정, 403/404 분기, 팀 목록 DB 조회를 직접 들고 있어 RBAC 기준이 중복될 위험이 있다.
  • managed_by 업데이트는 active user 여부만 확인하고 같은 organization 소속 여부를 확인하지 않는다.

작업 범위

  1. 등록된 Team API 구현 기준을 하나로 정리한다.
  2. DELETE /api/v1/teams/{team_id} 비활성화 엔드포인트를 문서 기준으로 복구한다.
  3. controller에 있는 RBAC/scope 판정과 DB 조회를 가능한 service/helper 쪽으로 이동한다.
  4. managed_by 업데이트 시 같은 organization active membership 여부를 검증한다.
  5. teams.py 중복 구현을 제거하거나 등록되지 않는 이유를 명확히 정리한다.
  6. 기존 Team API 테스트를 보강하고 회귀를 확인한다.

Acceptance Criteria

  • DELETE /api/v1/teams/{team_id}가 등록 라우터에서 동작한다.
  • team 생성/수정/비활성화/member 추가/member 제거가 X-Organization-Id와 organization manager 권한 기준으로 동작한다.
  • scope 밖 organization/team은 404로 숨기고, scope 안 일반 member의 manager 권한 부족은 403으로 반환한다.
  • managed_by는 같은 organization의 active member 또는 null만 허용한다.
  • 등록되지 않은 teams.py와 실제 team.py 사이의 중복/혼선이 제거된다.
  • 관련 API/service 테스트가 통과한다.

Metadata

Metadata

Assignees

Labels

Type

No type

Fields

Priority

None yet

Projects

Status
Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions