3つのアプリ共通の、メールアドレス/パスワードによるログイン基盤。ユーザーのロールに応じて利用アプリが分かれる。
ユーザー画面・組織管理画面・システム管理画面の3アプリは、いずれも NextAuth の Credentials プロバイダ
(メールアドレス+パスワード)でログインする。ログイン時に独自の Session レコードを作成し、
JWT の sub にそのセッションIDを格納する。
| ロール | フラグ | 利用アプリ | applicationType |
|---|---|---|---|
| 一般ユーザー | なし | ユーザー画面(apps/user) | User |
| 組織管理者 | isOrganizationManager | 組織管理画面(apps/organization-manager) | OrganizationManager |
| システム管理者 | isSystemManager | システム管理画面(apps/system-manager) | SystemManager |
/sign-in)でメールアドレス・パスワードを入力。Session を作成(applicationType / IP / UA / debugOrganizationId)。sub に session.id を格納。Cookie 名は myAuthCookie。auth() がセッションから user(+ organization)を解決して提供。
特定ユーザー・組織としてログインして動作確認するための経路
(/sign-in/debug/users/[userId]/organizations/[organizationId]、ユーザー画面・組織管理画面に存在)。
入口はシステム管理画面の組織詳細(/organizations/[organizationId])の「ユーザー/組織管理者としてログイン」ボタンで、そこから対象アプリのデバッグ経路へ遷移する。
作成されるセッションに debugOrganizationId(一時組織ID)が記録される。
Session
prisma/schema/session.prisma
userId / applicationTypeipAddress / userAgentdebugOrganizationId? デバッグ用一時組織User
prisma/schema/user.prisma
email / passwordisOrganizationManager / isSystemManagerorganizationId 所属組織apps/{user,organization-manager,system-manager}/lib/auth/index.tsapps/{app}/lib/auth/providers/credentials-provider/apps/{app}/app/api/[...nextauth]/route.tsapps/{app}/app/sign-in/(+ /sign-in/debug/...)components/auth-page.tsx
ユーザー画面のモバイル版に設定画面(/v/settings)がある。アカウント情報(契約名=組織名/ログインユーザー名・メール)の表示、ログアウト、
そしてロールに応じた他アプリへの導線を提供する。
本ドキュメントは既存実装をもとに遡及作成。今後の改修は sessions/ 配下に追記する。