Skip to content

✨ Add session context endpoint (GET /api/v1/me) with Keto instance roles - #18

Open
turtton wants to merge 4 commits into
mainfrom
feat/moderation-session-context
Open

✨ Add session context endpoint (GET /api/v1/me) with Keto instance roles#18
turtton wants to merge 4 commits into
mainfrom
feat/moderation-session-context

Conversation

@turtton

@turtton turtton commented Jul 29, 2026

Copy link
Copy Markdown
Member

概要

BFF (RatCap) がログインユーザーの instance role (admin/moderator) を UI 表示制御のため取得できるエンドポイント GET /api/v1/me を追加します。ロールの正源は Ory Keto で、Kratos metadata や JWT claim 注入は採用しません (ADR 0004)。

GET /api/v1/me → 200 { "account_id": "<AuthAccountId>", "instance_roles": ["admin" | "moderator"] }
  • ロールなし: 200 + instance_roles: [] (403 ではない)
  • Keto 障害: 503 (空配列へのフォールバックなし)
  • 未認証: 401 (既存 auth_middleware)
  • roles は Keto relation の direct 結果 (admin が moderator を暗黙に含まない)
  • account_idAuthAccountId (1 auth identity が複数 Account に紐づきうるため AccountId は返さない)

変更内容

変更
kernel PermissionChecker::list_instance_roles 追加 (direct roles を型付きで返す)
driver KetoClientGET /relation-tuples 実装 (ページング完走・宣言順マッピング・障害は KernelError::Internal)
application GetSessionContextUseCase + SessionContext DTO (DependOnPermissionChecker のみ束縛)
server route/me.rs / schema/me.rs / OpenAPI 登録・openapi.json 再生成、テストシーム (AppModule::new_for_test_urls、JWKS preload 認証テストルータ)
intents ADR 0004、packets/backlog 登録、packet (.intent-cli/issues/moderation-session-context/)

検証

  • TDD: 全層 RED→GREEN (kernel E0599 / driver unimplemented panic / application E0433 → 全 GREEN)
  • テスト: kernel 87 / driver 119 (実 DB) / application 31 / server 41 全 pass、cargo fmt --check / git diff --check pass
  • /me 結合テスト 5 件 (S1/S2/S3/S5) は実 DB + wiremock Keto で実実行

実サービス手動 QA (docker compose 実スタック + cargo run -p server)

シナリオ 結果
S2 ロール未付与 200 {"account_id":"75613492660404224","instance_roles":[]}
S1 admins tuple 付与後 200 {"instance_roles":["admin"]}
S3 Keto 停止 503 (200+[] にフォールバックしないことを確認、復旧も確認)
S5 未認証 401

クリーンアップ済み (Keto tuple / Hydra テストクライアント削除、サーバー停止)。詳細な手順と証跡は .intent-cli/issues/moderation-session-context/review-context.md に記録。

備考

  • BFF (RatCap) 側はセッション確立時に本 EP を呼び TTL キャッシュし、403 受信時に再取得する運用を想定
  • ロールの付与・剥奪 API は別実行単位 (moderation-role-assignment)

turtton added 4 commits July 29, 2026 15:53
BFF (RatCap) 向けに admin/moderator ロールを伝達する方針を ADR 0004 として記録。
Keto を正源とし GET /api/v1/me で提供する。Kratos metadata_public と JWT claim
注入は正源二重化・鮮度の観点から却下。moderation-session-context 実行単位を
packets/backlog に登録し、packet に実サービス手動 QA 証跡を記録。
PermissionChecker に list_instance_roles を追加し、KetoClient に
GET /relation-tuples (read API) による一覧取得を実装。
next_page_token を完走して relation を集約し、admins/moderators を
InstanceRole 宣言順の direct relation として返す。Keto 障害時は
KernelError::Internal を返し空配列へのフォールバックは行わない。
GetSessionContextUseCase を追加。DependOnPermissionChecker のみに束縛し、
AuthAccountId と Keto の direct instance roles を含む SessionContext を返す。
account read-model には依存しない (1 auth identity が複数 Account に
紐づきうるため AuthAccountId をそのまま返す設計)。
GET /api/v1/me を追加。JWT 認証済みユーザーの AuthAccountId を
resolve_auth_account_id で解決し、GetSessionContextUseCase 経由で
Keto の instance roles を返す。ロールなしは 200 + 空配列、Keto 障害は
503 (空配列にフォールバックしない)。未認証は既存 middleware で 401。
テストシームとして AppModule::new_for_test_urls と JWKS preload 済みの
認証テストルータを追加。
@codecov

codecov Bot commented Jul 29, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 96.59574% with 16 lines in your changes missing coverage. Please review.
✅ Project coverage is 64.57%. Comparing base (cc5c6a4) to head (35311c9).

Files with missing lines Patch % Lines
application/src/service/session_context.rs 92.63% 7 Missing ⚠️
kernel/src/permission.rs 85.71% 7 Missing ⚠️
server/src/main.rs 0.00% 1 Missing ⚠️
server/src/route/me.rs 99.47% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main      #18      +/-   ##
==========================================
+ Coverage   63.30%   64.57%   +1.27%     
==========================================
  Files         158      160       +2     
  Lines       15774    16194     +420     
==========================================
+ Hits         9985    10457     +472     
+ Misses       5789     5737      -52     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant