架空の記録を2件用意する
これは紙面上の教材です。以下のアカウント、顧客、契約、金額はすべて架空です。自分の練習プロジェクトでケースを実行してから、実際の結果を記録できます。
| 練習用アカウント | 閲覧を許可する顧客記録 | 契約番号 | 金額 |
|---|---|---|---|
| A | A-001 | HT-A-01 | 10,000 CNY(中国人民元) |
| B | B-001 | HT-B-01 | 20,000 CNY(中国人民元) |
最初の要望は、ログイン後に記録番号で契約を検索し、自分のアカウントに許可された記録だけを読むことです。追加、編集、書き出しは今回の練習に含めません。
問題はどう起きるか
画面にはログインがあるものの、APIが入力された記録番号だけで検索するとします。AがA-001を入力すれば、自分の契約が返ります。B-001を入力してもBの契約が返るなら、検索にデータ範囲の制限がありません。
画面にAの顧客だけを表示しても、APIの保護には不十分です。リクエストは別の方法で送られたり、書き換えられたりすることがあります。
検索をどう組み立てるか
- サーバーは検証済みのログイン状態から現在の利用者を取得します。未ログインなら、制限された資料の読み取りを拒否します。
- その利用者に許可された範囲に絞り、入力された番号と合わせて検索します。リクエスト内で利用者が指定したアカウント情報を信用しません。
- 閲覧できる記録がなければ、契約内容を含まない案内を返します。画面には「閲覧できる情報が見つかりません」と表示する、といった方法があります。
実際のシステムでは、個人、チーム、その他の業務ルールで許可する場合があります。先にルールを書き、適したデータ構造と実装を選びます。
変更後に使うテスト計画
以下はテスト計画と期待する結果です。自分のプロジェクトで実行する必要があり、実施済みの結果ではありません。
| ログイン状態と操作 | 期待する結果 |
|---|---|
| AがA-001を検索 | HT-A-01、金額10,000 CNY(中国人民元)を返す |
| AがB-001を検索 | Bの契約や金額を返さない |
| BがB-001を検索 | HT-B-01、金額20,000 CNY(中国人民元)を返す |
| BがA-001を検索 | Aの契約や金額を返さない |
| 未ログインでA-001を直接リクエスト | 読み取りを拒否し、契約内容を返さない |
| Aが画面を経由せずB-001を直接リクエスト | 同じ権限確認を適用し、Bの情報を返さない |
| Aが存在しない番号を入力 | 他の契約内容を含めず、見つからないことを明確に伝える |
試したアカウント、入力、実際の結果を残します。応答データに、画面で見えていない別の記録が含まれていないかも確認してください。画面だけを見ると、APIが余分に返したデータを見落とすことがあります。
入口を増やしたら、同じルールを適用する
後から検索、書き出し、AIの質問機能を追加する場合も、同じデータ範囲を使うか確認します。AIが回答前に読める情報も、システムの権限で決めます。
このケースは主にアカウントをまたぐ読み取りの確認です。全体では、入力処理、編集権限、ログ、公開、バックアップなども機能に合わせて確認します。公開前チェックリストで必要な項目を補い、要望を決める段階では1ページの課題整理を使えます。
よくある質問
実際の顧客プロジェクトですか?
ログインがあるのに、なぜ他人の情報が見えるのですか?
次に読む
- 問題が起きたときの調べ方 — 操作と環境から原因を探す
- 公開前のチェックリスト — 機能に応じて確認を補う
- Vibe Codingから、ほかの仕事へ — 要望、操作、確認、再利用を知る