コンテンツにスキップ

登場人物

ロール一覧

管理画面のユーザーは 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 で参照するため、予約が残っているユーザーは削除できない