Files
portfolio-hub/docs/srs/Interface/req-044_get-v1-assets-require-read-relaxation.md
T
genichinandClaude Opus 4.8 853a9bdab8 docs(dcy-009): confirm-req-implemented — REQ-044/045 Implemented, bat-019 confirmed
머지 PR #16(7f15c6b) 반영. 사용자 read 엔드포인트 delivery 완료. REQ-045 env토큰 처리 200+empty로 문서 동기화(change-req).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VHtM5Ws1HKCKQ4JGi6GRb5
2026-06-27 10:46:35 +09:00

5.9 KiB

REQ-044: GET /v1/assets 권한 완화 — require_admin → require_read

  • Status: Implemented
  • Approved By: 팀장 (Claude), 2026-06-27 (confirm-req)
  • Type: Interface
  • Priority: High
  • Owner: Justin Ko

Intent

  • GET /v1/assets(asset 카탈로그 목록 조회) 엔드포인트의 의존성을 require_admin에서 require_read로 완화해, 일반 인증 사용자가 active asset 카탈로그를 조회할 수 있도록 한다.
  • trex-web 포트폴리오 관리 UI(dcy-007)에서 포트폴리오 생성·변경 시 종목 선택 드롭다운/검색이 이 엔드포인트를 소비한다. 현재 require_admin으로 막혀 있어 일반 사용자가 접근 불가한 상태다.
  • asset 쓰기(POST 생성, PATCH 수정/비활성, POST/DELETE 태그 적용/해제)는 require_admin을 유지한다 — 이번 완화는 읽기 하나에 한정한다.

Requirement

  • 시스템은 GET /v1/assets 엔드포인트의 인증 의존성을 require_admin에서 require_read로 변경해야 한다.
  • 기존 동작(status 필터·market 필터·AssetCatalogListResponse 응답 스키마)은 변경 없이 유지해야 한다.
  • asset 쓰기 엔드포인트(POST /v1/assets, PATCH /v1/assets/{asset_id}, PATCH /v1/assets/{asset_id}/deactivate, POST /v1/assets/{asset_id}/tags, DELETE /v1/assets/{asset_id}/tags/{tag_id})는 require_admin을 유지해야 한다.
  • 유효한 read 권한 이상 토큰(session, read service token, admin)으로 GET /v1/assets를 호출하면 HTTP 200과 카탈로그 목록을 반환해야 한다.
  • 인증 토큰 없는 요청은 HTTP 401, 권한이 없는 토큰은 기존 동작대로 HTTP 403을 반환해야 한다.

Acceptance Criteria

  1. Given read 권한 세션 토큰(permission="read")을 소지한 사용자, When GET /v1/assets를 호출, Then HTTP 200 + AssetCatalogListResponse 반환.
  2. Given admin 토큰, When GET /v1/assets를 호출, Then 기존과 동일하게 HTTP 200 반환(회귀 없음).
  3. Given read 권한 사용자, When GET /v1/assets?status=active·?status=inactive·?status=all로 호출, Then status 필터가 적용된 응답 반환(필터 동작 유지).
  4. Given read 권한 사용자, When GET /v1/assets?market=KRX로 호출, Then market 필터가 적용된 응답 반환(필터 동작 유지).
  5. Given read 권한 사용자, When POST /v1/assets(asset 생성)를 호출, Then HTTP 403(쓰기는 admin 유지).
  6. Given read 권한 사용자, When PATCH /v1/assets/{asset_id}/deactivate를 호출, Then HTTP 403.
  7. Given read 권한 사용자, When POST /v1/assets/{asset_id}/tags를 호출, Then HTTP 403.
  8. Given read 권한 사용자, When DELETE /v1/assets/{asset_id}/tags/{tag_id}를 호출, Then HTTP 403.
  9. Given 인증 토큰 없는 요청, When GET /v1/assets를 호출, Then HTTP 401.

Impacted Area

  • Docs: docs/srs/Interface/req-044_get-v1-assets-require-read-relaxation.md (신규)
  • Modules:
    • app/api/v1_assets.py: list_catalog_assets 함수의 auth: AuthContext = Depends(require_admin) → Depends(require_read) 변경. import에 require_read 추가.
  • Tests: 기존 tests/의 GET /v1/assets 관련 테스트에서 read 토큰으로 200 반환하는 케이스 추가. 쓰기 엔드포인트 403 회귀 확인.

Notes

  • asset 카탈로그(거래 가능 종목 메타 — symbol·display_name·markets·status·태그)는 전 인증 사용자에게 read 공개해도 무방하다고 사장님이 확인(dcy-009 OQ-1 Answered 2026-06-27).
  • 코드 변경 범위는 app/api/v1_assets.py 단일 파일의 Depends(require_admin) → Depends(require_read) 한 줄이다. 응답 로직·필터·스키마는 변경 없다.
  • require_read는 app/core/auth.py에 이미 정의(require_read = permission_dependency(Permission.READ))되어 있다.
  • NFR-1(기존 admin asset 관리·토큰 daemon 바인딩 회귀 0)은 AC-2, AC-5~8의 쓰기 403 확인으로 흡수한다. 별도 NFR REQ 미생성.
  • NFR-2(데몬 목록 caller 스코프)는 REQ-045에서 다룬다.

Change Log

CHG-20260627-02

  • Date: 2026-06-27
  • Author: 팀장 (Claude)

Change Summary

  • 상태 Approved → Implemented (confirm-req-implemented).

Intent

  • BAT-019 PR #16이 main(7f15c6b)으로 머지 완료됨에 따라 구현·검증 완료를 공식화한다.

Acceptance Criteria Delta

  • Added: 없음
  • Updated: 없음
  • Removed: 없음

Impacted Area Delta

  • Docs: 상태 전환 기록만.
  • Modules: 변경 없음.
  • Tests: 변경 없음.

Delivery Trace Delta

  • Batches: BAT-019
  • PR: #16 (main 머지, HEAD 7f15c6b)
  • QC: PASS (독립 qc-reviewer)
  • Releases: 미정

Revalidation Impact

  • Reverification Needed: no
  • Existing Implementation Invalidated: no
  • Status Recommendation: Implemented
  • Follow-up Action: 없음

Validation Plan

  • BAT-019 verification.md Evidence — 472 passed, 0 failed (2026-06-27). AC-1~9 전부 PASS.

CHG-20260627-01

  • Date: 2026-06-27
  • Author: Justin Ko

Change Summary

  • 신규 생성 (Proposed) — dcy-009 FR-1 구현을 위한 첫 번째 REQ 초안.

Intent

  • dcy-009 confirmed Discovery의 FR-1을 REQ로 정규화한다. 코드·테스트 구현의 기준 문서로 사용.

Acceptance Criteria Delta

  • Added:
    • AC-1 ~ AC-9 전체 (신규 초안)
  • Updated: 없음
  • Removed: 없음

Impacted Area Delta

  • Docs:
    • docs/srs/Interface/req-044_get-v1-assets-require-read-relaxation.md 신규 생성
  • Modules:
    • app/api/v1_assets.py (require_admin → require_read 1행)
  • Tests:
    • read 권한 GET 200 케이스 추가, 쓰기 403 회귀 케이스 확인

Delivery Trace Delta

  • Batches: 미정 (suggest-batch-reqs 대기)
  • Releases: 미정

Revalidation Impact

  • Reverification Needed: no
  • Existing Implementation Invalidated: no
  • Status Recommendation: keep-current
  • Follow-up Action: confirm-req 후 batch 배정

Validation Plan

  • pytest로 read 토큰 GET /v1/assets 200 확인, admin 쓰기 403 회귀 확인.