登場人物
ロール一覧
管理画面のユーザーは users.role で 3 段階のロールを持つ。ロールは階層構造で、上位ロールは下位ロールの権限をすべて含む(admin 3 > member 2 > viewer 1)。
| ロール名 | 説明 | 主な操作 |
|---|---|---|
admin(管理者) |
システム全体の管理者 | member の全操作に加え、将来的な管理系操作 |
member(メンバー) |
リサーチ担当者。既定のロール | プロジェクト・候補者・面接官・メールテンプレートの作成/更新/削除、メール送信、インポート実行、日程確定、予約キャンセル |
viewer(閲覧者) |
参照のみ | 一覧・詳細・履歴・ダッシュボードの閲覧、アンケートデータの参照 |
権限判定は requireRole() ミドルウェアが行い、各ルータで POST / PATCH / PUT / DELETE に対してまとめて member 以上を要求する。不足時は 403 FORBIDDEN(この操作を行う権限がありません)。
アンケートルータは例外
/api/v1/surveys/* は認証(protectedRoute())のみを要求し、ロール制限をかけていない。参照専用だが、viewer でも全アンケートの回答を閲覧できる。
システム外の登場人物
| 登場人物 | 説明 | できること |
|---|---|---|
| 候補者(インタビュー対象者) | candidates テーブルの個人。管理画面のユーザーではない |
発行された調整トークン付き URL(/scheduling/{token})から、案件情報の確認と希望日程の送信 |
| Creative Survey / Ask One | アンケート基盤。回答は Databricks 経由で参照する | (システムからは読み取りのみ) |
| Google Workspace | OAuth・Calendar・Gmail の提供元 | ログイン認証、面接官の空き枠取得、仮枠/確定イベントの作成、メール送信 |
ロール関係図
graph TD
Admin[admin<br/>管理者]
Member[member<br/>メンバー]
Viewer[viewer<br/>閲覧者]
Candidate[候補者<br/>認証なし]
Google[Google Workspace]
DBX[Creative Survey / Ask One<br/>Databricks]
Admin -->|権限を包含| Member
Member -->|権限を包含| Viewer
Member -->|プロジェクト運用| System[面接調整システム]
Viewer -->|参照| System
Candidate -->|調整トークン| System
System -->|OAuth / Calendar / Gmail| Google
DBX -->|クエリ| System
面接官について
面接官は独立したロールではなく、project_interviewers によって プロジェクトに紐付けられた users レコード として表現される。したがって面接官は必ず管理画面のユーザーでもある。
- 面接官の追加/削除は
member以上が行う(POST/DELETE /api/v1/projects/{projectId}/interviewers) - 空き枠の算出は面接官の Google Calendar を参照する
- 予約(
reservations.interviewer_id)はusersをonDelete: restrictで参照するため、予約が残っているユーザーは削除できない