[テンプレ]UAC仕様書

関連テンプレ構成
テンプレート
# UAC仕様

本章では、システムにおけるユーザーの権限管理とアクセス制御の仕様を定義する。

---

## ロール定義

### ロール一覧

| ロールID | ロール名 | 説明 | 対象ユーザー |
|---------|---------|------|------------|
| ROLE_ADMIN | システム管理者 | すべての機能とデータにアクセス可能 | システム運用担当者 |
| ROLE_MANAGER | 店舗管理者 | 店舗内の商品・在庫・注文管理が可能 | 店舗責任者 |
| ROLE_STAFF | スタッフ | 注文処理と在庫照会が可能 | 店舗スタッフ |
| ROLE_CUSTOMER | 一般会員 | 商品閲覧・注文・マイページ閲覧が可能 | 登録会員 |
| ROLE_GUEST | ゲスト | 商品閲覧のみ可能 | 未登録ユーザー |

### ロール階層構造

```mermaid
graph TD
    A[ROLE_ADMIN システム管理者] --> B[ROLE_MANAGER 店舗管理者]
    B --> C[ROLE_STAFF スタッフ]
    C --> D[ROLE_CUSTOMER 一般会員]
    D --> E[ROLE_GUEST ゲスト]
```

上位ロールは下位ロールの権限をすべて継承する。

---

## 機能別アクセス権限マトリクス

### 会員管理機能

| 機能 | ADMIN | MANAGER | STAFF | CUSTOMER | GUEST |
|------|-------|---------|-------|----------|-------|
| 会員一覧閲覧 ||| × | × | × |
| 会員詳細閲覧 ||| × |  (自分のみ) | × |
| 会員情報編集 ||| × |  (自分のみ) | × |
| 会員削除 || × | × | × | × |
| 会員ステータス変更 ||| × | × | × |

### 商品管理機能

| 機能 | ADMIN | MANAGER | STAFF | CUSTOMER | GUEST |
|------|-------|---------|-------|----------|-------|
| 商品一覧閲覧 ||||||
| 商品詳細閲覧 ||||||
| 商品登録 ||| × | × | × |
| 商品編集 ||| × | × | × |
| 商品削除 ||| × | × | × |
| 在庫照会 |||| × | × |
| 在庫更新 ||| × | × | × |

### 注文管理機能

| 機能 | ADMIN | MANAGER | STAFF | CUSTOMER | GUEST |
|------|-------|---------|-------|----------|-------|
| 注文一覧閲覧 ||||  (自分のみ) | × |
| 注文詳細閲覧 ||||  (自分のみ) | × |
| 注文登録 ||||| × |
| 注文キャンセル ||||  (発送前のみ) | × |
| 注文ステータス変更 |||| × | × |
| 決済情報閲覧 ||| × |  (自分のみ) | × |

### システム管理機能

| 機能 | ADMIN | MANAGER | STAFF | CUSTOMER | GUEST |
|------|-------|---------|-------|----------|-------|
| ユーザー管理 || × | × | × | × |
| ロール管理 || × | × | × | × |
| システム設定 || × | × | × | × |
| ログ閲覧 || × | × | × | × |
| バックアップ管理 || × | × | × | × |

**凡例:**
-: 完全なアクセス権あり
-: 制限付きアクセス権あり
- ×: アクセス権なし

---

## データアクセス制御

### データスコープ

| ロール | データスコープ | 説明 |
|-------|-------------|------|
| ADMIN | 全データ | すべてのデータにアクセス可能 |
| MANAGER | 店舗単位 | 自店舗のデータのみアクセス可能 |
| STAFF | 店舗単位 | 自店舗のデータのみアクセス可能(一部機能制限) |
| CUSTOMER | 個人単位 | 自分のデータのみアクセス可能 |
| GUEST | 公開データのみ | 公開設定されたデータのみ閲覧可能 |

### データアクセスフロー

```mermaid
sequenceDiagram
    participant U as ユーザー
    participant A as 認証サービス
    participant B as 認可サービス
    participant D as データベース

    U->>A: ログイン要求
    A->>A: 認証処理
    A->>U: アクセストークン発行
    U->>B: データアクセス要求 + トークン
    B->>B: トークン検証
    B->>B: ロール・権限チェック
    alt 権限あり
        B->>D: データ取得
        D->>B: データ返却
        B->>U: データ返却
    else 権限なし
        B->>U: アクセス拒否 (403 Forbidden)
    end
```

---

## 認証・認可方式

### 認証方式

| 認証方式 | 対象ユーザー | 説明 |
|---------|------------|------|
| ID/パスワード認証 | 全ユーザー | メールアドレスとパスワードによる認証 |
| 二要素認証 (2FA) | ADMIN, MANAGER | SMS または認証アプリによる追加認証 |
| SSO (Single Sign-On) | STAFF, CUSTOMER | 外部IDプロバイダー連携 (Google, Facebook) |

### パスワードポリシー

| 項目 | 要件 |
|------|------|
| 最小文字数 | 8文字 |
| 文字種 | 英大文字・小文字・数字・記号を各1文字以上含む |
| 有効期限 | 90 (ADMIN, MANAGER のみ) |
| 履歴管理 | 過去3回のパスワードは再利用不可 |
| ロックアウト | 5回連続失敗でアカウントロック (30分間) |

### トークン管理

| トークン種別 | 有効期限 | 更新方式 | 用途 |
|------------|---------|---------|------|
| アクセストークン | 1時間 | リフレッシュトークンで更新 | API認証 |
| リフレッシュトークン | 7日間 | 再ログインが必要 | アクセストークン更新 |
| セッショントークン | 24時間 | アクティビティで延長 | Web画面認証 |

---

## 権限チェックのタイミング

```mermaid
graph LR
    A[リクエスト受信] --> B{認証済み?}
    B -->|No| C[ログイン画面へリダイレクト]
    B -->|Yes| D{ロール権限チェック}
    D -->|権限なし| E[403 Forbidden]
    D -->|権限あり| F{データスコープチェック}
    F -->|範囲外| E
    F -->|範囲内| G[処理実行]
    G --> H[レスポンス返却]
```

### チェックポイント

1. **画面表示時**: 画面へのアクセス権限をチェック
2. **API呼び出し時**: API実行権限をチェック
3. **データ取得時**: データアクセス権限をチェック
4. **データ更新時**: データ更新権限をチェック

---

## 特別な権限制御

### 時限的権限付与

管理者は、特定の期間のみ有効な権限を付与できる。

| 項目 | 内容 |
|------|------|
| 付与可能なロール | ADMIN のみ |
| 対象ロール | MANAGER, STAFF |
| 最大期間 | 30日間 |
| 自動失効 | 期限到着時に自動的に権限失効 |

### IPアドレス制限

管理機能へのアクセスはIPアドレスで制限可能。

| ロール | IP制限 |
|-------|--------|
| ADMIN | 社内ネットワークからのみアクセス可能 |
| MANAGER | 制限なし(推奨: VPN経由) |
| STAFF | 制限なし |

---

## 監査ログ

### 記録対象操作

| 操作種別 | 記録内容 |
|---------|---------|
| ログイン/ログアウト | ユーザーIDIPアドレス、タイムスタンプ |
| データ参照 | ユーザーID、対象データID、タイムスタンプ |
| データ更新 | ユーザーID、対象データID、変更前後の値、タイムスタンプ |
| データ削除 | ユーザーID、削除データID、タイムスタンプ |
| 権限変更 | 実行者ID、対象ユーザーID、変更内容、タイムスタンプ |

### ログ保持期間

- **一般操作ログ**: 1年間
- **重要操作ログ** (削除、権限変更など): 3年間
- **セキュリティログ** (ログイン失敗など): 2年間

---

## エラーハンドリング

| エラー種別 | HTTPステータス | メッセージ | 対応 |
|-----------|--------------|----------|------|
| 未認証 | 401 Unauthorized | "認証が必要です" | ログイン画面へリダイレクト |
| 権限不足 | 403 Forbidden | "この操作を実行する権限がありません" | エラーメッセージ表示 |
| リソース未発見 | 404 Not Found | "指定されたリソースが見つかりません" | エラーメッセージ表示 |
| トークン期限切れ | 401 Unauthorized | "セッションが期限切れです" | 再ログイン要求 |

---

## セキュリティ要件

### 通信セキュリティ

- すべての通信はHTTPS (TLS 1.2以上) で暗号化
- APIアクセスにはBearerトークン使用
- クロスオリジンリクエストはCORS設定で制限

### データ保護

- パスワードはbcryptでハッシュ化 (cost: 12)
- 個人情報は暗号化して保存
- クレジットカード情報は保存せず、決済代行サービスのトークンのみ保持

### セッション管理

- セッションIDは推測困難なランダム値
- セッション固定攻撃対策: ログイン時にセッションIDを再生成
- CSRF対策: CSRFトークンの検証を必須化

---
プレビュー

UAC仕様

本章では、システムにおけるユーザーの権限管理とアクセス制御の仕様を定義する。


ロール定義

ロール一覧
ロールID ロール名 説明 対象ユーザー
ROLE_ADMIN システム管理者 すべての機能とデータにアクセス可能 システム運用担当者
ROLE_MANAGER 店舗管理者 店舗内の商品・在庫・注文管理が可能 店舗責任者
ROLE_STAFF スタッフ 注文処理と在庫照会が可能 店舗スタッフ
ROLE_CUSTOMER 一般会員 商品閲覧・注文・マイページ閲覧が可能 登録会員
ROLE_GUEST ゲスト 商品閲覧のみ可能 未登録ユーザー
ロール階層構造
graph TD
    A[ROLE_ADMIN システム管理者] --> B[ROLE_MANAGER 店舗管理者]
    B --> C[ROLE_STAFF スタッフ]
    C --> D[ROLE_CUSTOMER 一般会員]
    D --> E[ROLE_GUEST ゲスト]

上位ロールは下位ロールの権限をすべて継承する。


機能別アクセス権限マトリクス

会員管理機能
機能 ADMIN MANAGER STAFF CUSTOMER GUEST
会員一覧閲覧 × × ×
会員詳細閲覧 × △ (自分のみ) ×
会員情報編集 × △ (自分のみ) ×
会員削除 × × × ×
会員ステータス変更 × × ×
商品管理機能
機能 ADMIN MANAGER STAFF CUSTOMER GUEST
商品一覧閲覧
商品詳細閲覧
商品登録 × × ×
商品編集 × × ×
商品削除 × × ×
在庫照会 × ×
在庫更新 × × ×
注文管理機能
機能 ADMIN MANAGER STAFF CUSTOMER GUEST
注文一覧閲覧 △ (自分のみ) ×
注文詳細閲覧 △ (自分のみ) ×
注文登録 ×
注文キャンセル △ (発送前のみ) ×
注文ステータス変更 × ×
決済情報閲覧 × △ (自分のみ) ×
システム管理機能
機能 ADMIN MANAGER STAFF CUSTOMER GUEST
ユーザー管理 × × × ×
ロール管理 × × × ×
システム設定 × × × ×
ログ閲覧 × × × ×
バックアップ管理 × × × ×

凡例:

  • ○: 完全なアクセス権あり
  • △: 制限付きアクセス権あり
  • ×: アクセス権なし

データアクセス制御

データスコープ
ロール データスコープ 説明
ADMIN 全データ すべてのデータにアクセス可能
MANAGER 店舗単位 自店舗のデータのみアクセス可能
STAFF 店舗単位 自店舗のデータのみアクセス可能(一部機能制限)
CUSTOMER 個人単位 自分のデータのみアクセス可能
GUEST 公開データのみ 公開設定されたデータのみ閲覧可能
データアクセスフロー
sequenceDiagram
    participant U as ユーザー
    participant A as 認証サービス
    participant B as 認可サービス
    participant D as データベース

    U->>A: ログイン要求
    A->>A: 認証処理
    A->>U: アクセストークン発行
    U->>B: データアクセス要求 + トークン
    B->>B: トークン検証
    B->>B: ロール・権限チェック
    alt 権限あり
        B->>D: データ取得
        D->>B: データ返却
        B->>U: データ返却
    else 権限なし
        B->>U: アクセス拒否 (403 Forbidden)
    end

認証・認可方式

認証方式
認証方式 対象ユーザー 説明
ID/パスワード認証 全ユーザー メールアドレスとパスワードによる認証
二要素認証 (2FA) ADMIN, MANAGER SMS または認証アプリによる追加認証
SSO (Single Sign-On) STAFF, CUSTOMER 外部IDプロバイダー連携 (Google, Facebook)
パスワードポリシー
項目 要件
最小文字数 8文字
文字種 英大文字・小文字・数字・記号を各1文字以上含む
有効期限 90日 (ADMIN, MANAGER のみ)
履歴管理 過去3回のパスワードは再利用不可
ロックアウト 5回連続失敗でアカウントロック (30分間)
トークン管理
トークン種別 有効期限 更新方式 用途
アクセストークン 1時間 リフレッシュトークンで更新 API認証
リフレッシュトークン 7日間 再ログインが必要 アクセストークン更新
セッショントークン 24時間 アクティビティで延長 Web画面認証

権限チェックのタイミング

graph LR
    A[リクエスト受信] --> B{認証済み?}
    B -->|No| C[ログイン画面へリダイレクト]
    B -->|Yes| D{ロール権限チェック}
    D -->|権限なし| E[403 Forbidden]
    D -->|権限あり| F{データスコープチェック}
    F -->|範囲外| E
    F -->|範囲内| G[処理実行]
    G --> H[レスポンス返却]
チェックポイント
  1. 画面表示時: 画面へのアクセス権限をチェック
  2. API呼び出し時: API実行権限をチェック
  3. データ取得時: データアクセス権限をチェック
  4. データ更新時: データ更新権限をチェック

特別な権限制御

時限的権限付与

管理者は、特定の期間のみ有効な権限を付与できる。

項目 内容
付与可能なロール ADMIN のみ
対象ロール MANAGER, STAFF
最大期間 30日間
自動失効 期限到着時に自動的に権限失効
IPアドレス制限

管理機能へのアクセスはIPアドレスで制限可能。

ロール IP制限
ADMIN 社内ネットワークからのみアクセス可能
MANAGER 制限なし(推奨: VPN経由)
STAFF 制限なし

監査ログ

記録対象操作
操作種別 記録内容
ログイン/ログアウト ユーザーID、IPアドレス、タイムスタンプ
データ参照 ユーザーID、対象データID、タイムスタンプ
データ更新 ユーザーID、対象データID、変更前後の値、タイムスタンプ
データ削除 ユーザーID、削除データID、タイムスタンプ
権限変更 実行者ID、対象ユーザーID、変更内容、タイムスタンプ
ログ保持期間
  • 一般操作ログ: 1年間
  • 重要操作ログ (削除、権限変更など): 3年間
  • セキュリティログ (ログイン失敗など): 2年間

エラーハンドリング

エラー種別 HTTPステータス メッセージ 対応
未認証 401 Unauthorized "認証が必要です" ログイン画面へリダイレクト
権限不足 403 Forbidden "この操作を実行する権限がありません" エラーメッセージ表示
リソース未発見 404 Not Found "指定されたリソースが見つかりません" エラーメッセージ表示
トークン期限切れ 401 Unauthorized "セッションが期限切れです" 再ログイン要求

セキュリティ要件

通信セキュリティ
  • すべての通信はHTTPS (TLS 1.2以上) で暗号化
  • APIアクセスにはBearerトークン使用
  • クロスオリジンリクエストはCORS設定で制限
データ保護
  • パスワードはbcryptでハッシュ化 (cost: 12)
  • 個人情報は暗号化して保存
  • クレジットカード情報は保存せず、決済代行サービスのトークンのみ保持
セッション管理
  • セッションIDは推測困難なランダム値
  • セッション固定攻撃対策: ログイン時にセッションIDを再生成
  • CSRF対策: CSRFトークンの検証を必須化