ユーザーストーリー仕様
権限・認可
権限に応じたデータ閲覧と機能アクセスを制御する
Purpose
権限に応じたデータ閲覧と機能アクセスを制御する
US-004: メンバー情報を閲覧したい
ユーザー: 社員 目的: 組織のメンバー情報を閲覧したい 価値: チーム構成や連絡先を把握できる
要件
| ID | 条件 | 振る舞い | Skip |
|---|---|---|---|
all-employees-visible | Always: 全社員が全社員のデータを閲覧できる | - | - |
US-005: メンバー一覧を閲覧したい
ユーザー: 社員 目的: メンバー一覧画面でチームメンバーを確認したい 価値: 組織構成を把握できる
要件
| ID | 条件 | 振る舞い | Skip |
|---|---|---|---|
members-header-link | Always: ヘッダーに「メンバー」リンクを表示する | - | - |
members-page-access | Always: 全社員が /employees にアクセスできる | - | - |
members-readonly-for-employee | If: 一般社員の場合 | メンバー一覧を閲覧のみ可能にする(編集不可) | - |
US-006: 社員の権限を変更したい
ユーザー: 管理者 目的: メンバー管理画面から社員の権限を変更したい 価値: 組織変更に応じて素早く権限を更新できる
要件
| ID | 条件 | 振る舞い | Skip |
|---|---|---|---|
employees-list | When: /employees にアクセスしたとき | 全社員を一覧表示する | - |
employees-list-display | When: 一覧を表示するとき | 各社員の以下を表示する: - アバター (Google アカウントの画像 / イニシャル fallback) - 氏名 (familyName + givenName、なければ name) - メールアドレス - メンター (アバタースタック、最大3名表示 + 超過分はバッジ) - メンティー (アバタースタック、最大3名表示 + 超過分はバッジ) - 現在の権限 | 同値分割 - employees-list で代表検証(表示要素は静的UIのため1ケースで十分) |
role-change | When: 権限セレクトで別の権限を選択したとき | 即座に権限を更新する | - |
role-change-success | When: 権限変更が成功したとき | 「権限を変更しました」とトースト表示する | - |
last-admin-error | If: 最後の管理者を降格しようとした場合 | エラーを返し「最後の管理者のため権限を変更できません。先に他の社員を管理者に昇格してください。」と表示する | - |
user-not-found | If: 対象ユーザーが存在しない場合 | 404 エラーを返す | - |
US-007: メンター関係を管理したい
ユーザー: 管理者 目的: メンバー管理画面からメンターとメンティーの紐付けを管理したい 価値: レビュー体制に応じたアクセス制御ができる
要件
| ID | 条件 | 振る舞い | Skip |
|---|---|---|---|
mentor-constraints | Always: メンター関係は以下の制約に従う: - 1人の社員は複数のメンターを持てる (多対多) - 1人のメンターは複数のメンティーを持てる (多対多) - 自分自身をメンター/メンティーに設定できない - 循環OK (AがBのメンター、BがAのメンター) | - | 多対多は信頼境界(DB スキーマ)で保証、自己参照禁止は self-mentee-error で検証、循環は制約なし |
mentor-dialog-open | When: メンターセルをクリックしたとき | メンター管理ダイアログを表示する | - |
mentor-dialog-display | When: メンター管理ダイアログを表示するとき | 以下を表示する: - メンター追加セレクト (全社員から選択可能) - 現在のメンター一覧 (削除ボタン付き) | 同値分割 - mentor-add/mentor-remove で代表検証(ダイアログ表示は操作の前提条件) |
mentor-add | When: メンターを選択したとき | メンター関係を追加し「メンターを追加しました」と表示する | - |
mentor-remove | When: メンター削除ボタンをクリックしたとき | メンター関係を削除し「メンターを解除しました」と表示する | - |
mentor-duplicate | If: 既に登録済みのメンターを追加しようとした場合 | 409 エラーを返す | UIで既存メンターは選択肢から除外されるため UI からは発生しない(API境界テストとして保持) |
mentee-dialog-open | When: メンティーセルをクリックしたとき | メンティー管理ダイアログを表示する | - |
mentee-dialog-display | When: メンティー管理ダイアログを表示するとき | 以下を表示する: - メンティー追加セレクト (全社員から選択可能) - 現在のメンティー一覧 (削除ボタン付き) | 同値分割 - mentee-add/mentee-remove で代表検証(ダイアログ表示は操作の前提条件) |
mentee-add | When: メンティーを選択したとき | メンター関係を追加し「メンティーを追加しました」と表示する | - |
mentee-remove | When: メンティー削除ボタンをクリックしたとき | メンター関係を削除し「メンティーを解除しました」と表示する | - |
mentee-duplicate | If: 既に登録済みのメンティーを追加しようとした場合 | 409 エラーを返す | UIで既存メンティーは選択肢から除外されるため UI からは発生しない(API境界テストとして保持) |
self-mentee-error | If: 自分自身をメンティーに設定しようとした場合 | 400 エラーを返す | 同値分割 - フロントエンドで自分自身を選択肢から除外しているため UI からは発生しない |
cascade-delete | When: ユーザーが削除されたとき | 関連するメンター関係も自動削除する | 信頼境界(DB の ON DELETE CASCADE)で保証 |