Copy
# 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 | 制限なし |
-- -
## 監査ログ
### 記録対象操作
| 操作種別 | 記録内容 |
| -- -- -- -- - | -- -- -- -- - |
| ログイン/ ログアウト | ユーザー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 トークンの検証を必須化
-- -