✨ Add session context endpoint (GET /api/v1/me) with Keto instance roles - #18
Open
turtton wants to merge 4 commits into
Open
✨ Add session context endpoint (GET /api/v1/me) with Keto instance roles#18turtton wants to merge 4 commits into
turtton wants to merge 4 commits into
Conversation
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 Report❌ Patch coverage is
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. 🚀 New features to boost your workflow:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概要
BFF (RatCap) がログインユーザーの instance role (admin/moderator) を UI 表示制御のため取得できるエンドポイント
GET /api/v1/meを追加します。ロールの正源は Ory Keto で、Kratos metadata や JWT claim 注入は採用しません (ADR 0004)。200+instance_roles: [](403 ではない)503(空配列へのフォールバックなし)401(既存 auth_middleware)account_idはAuthAccountId(1 auth identity が複数 Account に紐づきうるため AccountId は返さない)変更内容
PermissionChecker::list_instance_roles追加 (direct roles を型付きで返す)KetoClientにGET /relation-tuples実装 (ページング完走・宣言順マッピング・障害はKernelError::Internal)GetSessionContextUseCase+SessionContextDTO (DependOnPermissionChecker のみ束縛)route/me.rs/schema/me.rs/ OpenAPI 登録・openapi.json再生成、テストシーム (AppModule::new_for_test_urls、JWKS preload 認証テストルータ).intent-cli/issues/moderation-session-context/)検証
cargo fmt --check/git diff --checkpass/me結合テスト 5 件 (S1/S2/S3/S5) は実 DB + wiremock Keto で実実行実サービス手動 QA (docker compose 実スタック +
cargo run -p server)200{"account_id":"75613492660404224","instance_roles":[]}200{"instance_roles":["admin"]}503(200+[] にフォールバックしないことを確認、復旧も確認)401クリーンアップ済み (Keto tuple / Hydra テストクライアント削除、サーバー停止)。詳細な手順と証跡は
.intent-cli/issues/moderation-session-context/review-context.mdに記録。備考
moderation-role-assignment)