Classroom Check-in

スーパー管理者ガイド

🛡 スーパー管理者ガイド

全テナントの一覧・管理を行うシステム運営者向けの機能

注意

スーパー管理者機能は、システム全体を管理する権限を持ちます。テナントの停止は該当テナントの全ユーザーに影響を与えます。

このページの内容

セットアップ

スーパー管理者の追加方法は2つあります:

方法1: 環境変数で設定(初期セットアップ用)

最初のスーパー管理者は環境変数で設定します。

# カンマ区切りで複数指定可能

SUPER_ADMIN_EMAILS=admin@example.com,ops@example.com
gcloud run services update api \
  --region asia-northeast1 \
  --update-env-vars "SUPER_ADMIN_EMAILS=admin@example.com"

方法2: 管理画面で追加(推奨)

一度ログインできたら、管理画面から他の管理者を追加できます。

管理者管理画面

/super-admin/admins でスーパー管理者の追加・削除ができます。Firestoreに保存されるため、環境変数の再設定は不要です。

🔑 アクセス方法

1

Googleでログイン

通常のユーザーと同様にGoogleアカウントでログインします

2

スーパー管理画面へアクセス

ログインに使用したメールアドレスがSUPER_ADMIN_EMAILSに含まれている必要があります

3

管理画面URL

https://web-102013220292.asia-northeast1.run.app/super-admin

🛠 機能一覧

テナント管理 (/super-admin/tenants)

機能 説明
テナント一覧 全テナントをページング表示
ステータスフィルター 有効/停止中でフィルタリング
テナント停止 テナントを停止状態に変更(全ユーザーがアクセス不可に)
テナント再開 停止中のテナントを再開
管理/受講リンク 各テナントの管理画面・受講者画面へ直接アクセス
テナント削除 テナントと全サブコレクション(講座・セッション・ユーザー等)を完全に削除。テナントID手入力による誤操作防止付き

管理者管理 (/super-admin/admins)

機能 説明
管理者一覧 全スーパー管理者を表示(環境変数/Firestore両方)
管理者追加 メールアドレスで新しいスーパー管理者を追加
管理者削除 Firestoreに登録された管理者を削除(環境変数は削除不可)

テナント停止時の影響

  • 該当テナントの全ユーザーがアクセス不可になります
  • 既存のセッションデータは保持されます(削除されません)
  • テナントオーナーも含め、誰もログインできなくなります
  • 再開すれば元通りアクセス可能になります

テナント削除時の影響(不可逆)

  • テナントと全サブコレクション(講座・セッション・ユーザー・通知ポリシー等)が完全に削除されます
  • この操作は取り消せません
  • 誤操作防止のため、削除時にテナントIDの手入力による確認が必要です
  • 操作ログがサーバーに記録されます

🔌 API仕様

メソッド パス 機能
GET /api/v2/super/tenants 全テナント一覧(ページング対応)
GET /api/v2/super/tenants/:id テナント詳細(統計情報含む)
PATCH /api/v2/super/tenants/:id テナントステータス変更
GET /api/v2/super/admins スーパー管理者一覧
POST /api/v2/super/admins スーパー管理者追加
DELETE /api/v2/super/admins/:email スーパー管理者削除
DELETE /api/v2/super/tenants/:id テナント完全削除(全サブコレクション含む)

GET /api/v2/super/tenants クエリパラメータ

パラメータ デフォルト 説明
status string - active または suspended
limit number 50 取得件数(最大100)
offset number 0 オフセット
sort string createdAt createdAt, name, updatedAt
order string desc asc または desc

🔒 セキュリティ

認可の仕組み

  1. Firebase認証でログイン(IDトークン取得)
  2. APIリクエスト時にAuthorization: Bearer <ID Token>ヘッダを付与
  3. サーバー側でトークンを検証し、メールアドレスを取得
  4. SUPER_ADMIN_EMAILSに含まれるか判定
  5. 含まれない場合は403 Forbidden
項目 対応
管理者リストの保護 サーバーサイドのみで保持(クライアントに公開しない)
操作ログ 全操作をコンソールログに記録
Firestoreルール 変更不要(API経由のみアクセス)

🔧 トラブルシューティング

403 Forbidden が返る
  1. SUPER_ADMIN_EMAILSが設定されているか確認
  2. ログインに使用したメールアドレスが含まれているか確認
  3. メールアドレスの大文字/小文字は区別されません(自動で小文字に正規化)
「スーパー管理者機能は無効です」と表示される
SUPER_ADMIN_EMAILS環境変数が設定されていません。APIサーバーの環境変数を確認してください。
認証エラー
  1. Firebase認証が正しく設定されているか確認
  2. AUTH_MODE=firebaseが設定されているか確認
  3. IDトークンの有効期限が切れていないか確認(再ログインを試す)

開発モードでのテスト

AUTH_MODE=devの場合、X-User-Emailヘッダでスーパー管理者をシミュレートできます。

# スーパー管理者としてテナント一覧を取得
curl -H "X-User-Email: admin@example.com" \
  http://localhost:8080/api/v2/super/tenants

SUPER_ADMIN_EMAILSadmin@example.comが含まれている必要があります。