項 1 / 8
目的と使う場面を知る
何ができるようになるか、何のために学ぶかを確認します。
今回できるようになること
AさんとBさんはそれぞれ自分の書類だけを読め、他人の書類と未登録者の要求は拒否する。
この節で学ぶ理由と、前後の節とのつながり
このセクションの位置づけ
なぜ、今これを学ぶのか
画面に書類が表示されても、その人が読んでよい書類とは限りません。ログインの確認と、一つの書類を読む許可を分けて考えます。
ここまでの知識をどう使うか
前の節では、サイトを調べる作業の許可を確認しました。今回は、アプリの中でAさんにBさんの書類を見せてよいか、という別の許可を考えます。
この後、何につながるか
誰の書類を読ませてよいかを整理したら、次は持ち主を比べる短いコードを書きます。その後、管理者の役割を加えた練習に進みます。
この実習で確かめること
本人の書類は読めて、他人の書類は読めない理由の説明
実務では、どんな場面?
この節の本文で学んだことを、ログイン済みでも給与を読めない条件を確かめる実習で確かめます。扱う情報は配布した架空データだけです。
読み始める前に:この節の前提と言葉
ログインできることと、仕事の操作を許されることを分けます。本文では書類の持ち主を例に説明し、実習では社員ごとに許可された操作の一覧を読みます。Pythonの一か所を直します。
- アカウント・
- アカウントはサービス内の利用者を区別する登録情報。パスワードや用の鍵などが、そのアカウントのに使われます。ここではログイン済みという条件を与えた模型を使います。
- 書類・所有者
- 書類は業務の記録や報告書などのデータです。所有者はその書類が誰のものかを表す情報。要求した利用者と、書類の所有者を混同しません。
- ・
- は、そのアカウントを使えるかの確認です。は、その人に、いま指定した書類を読むなどの操作を許すかの判断です。「ログインできた」と「どの書類でも読める」は別の条件です。
- 正常系・拒否系
- 正常系は、本人が自分の書類を読むなど、できる必要がある操作です。拒否系は、他人の書類を読むなど、止める必要がある操作です。両方を確認することで、全員を拒否して仕事を止める修正も見つけられます。
Aさんが、Bさんの書類を、読みたいとします。Aさんは利用者、Bさんの書類は操作する対象、読むことは操作です。誰の何の操作かを分けると、何を許可すべきか考えやすくなります。
利用者名やは、人や書類を指定する情報です。名前やを知っているだけで、その書類を読んでよいという許可にはなりません。
一つのものを部分に分け、それぞれの役割を示しています。
- 誰が:利用者Aさん
- 何を:Bさんの書類
- どうしたいか:読む操作
名前やURLを知っていることは、その操作を許されていることとは違います。
パスワードやなどを使い、そのアカウントを使えるか確かめることをといいます。ログインで行う確認です。ただし、パスワードなどが盗まれていると別人が通ることもあり、現実の人物を絶対に証明するものではありません。
その利用者が、いま指定した書類を読んでよいか判断することをといいます。AさんとBさんが同じ方法でログインできても、読める書類は違うことがあります。
矢印の順に、何が行われるかを読みます。
- 認証:アカウントを使えるか
- 認可:この書類を読んでよいか
- 許可された書類:読む人に応じて異なる
パスワード等が盗まれていれば別人が認証を通ることもあります。
このアプリでは「一般社員は、自分の書類だけを読める」と決めます。まずAさんがログインできているか確認します。その後、指定された書類の持ち主がAさんかを確認します。Bさんの書類なら返しません。
Bさんの書類へのリンクを画面から消すだけでは、この確認の代わりにはなりません。を直接指定されても、サーバーが読む許可を調べる必要があります。
最初の問いに「はい」か「いいえ」で答え、対応する矢印をたどります。
- 持ち主はAさんか:サーバーで確認
- Aさんの書類:読むことを許可
- Bさんの書類:書類を返さない
画面からリンクを消すだけでは、直接の要求を防げません。
図:同じログイン状態から、判断が分かれる
一般社員は自分の書類だけを読める、というこの節の規則です。ログイン済みであることは共通なので、対象の違いに注目します。
この例の項目と手順を詳しく読む
- Aさん → Aさんの書類を読む
- 所有者が本人なので許可する。正常に仕事ができる条件。
- Aさん → Bさんの書類を読む
- 所有者が他人なので拒否する。ログイン成功を理由に許可しない。
- Aさん → 画面にない書類を直接指定
- リンクの表示ではなく、同じ所有者の規則をサーバーで確かめる。
全員を拒否すると漏えいは止まって見えても、必要な仕事ができません。本人の書類を読む例でも、部署の業務を行う例でも、許可すべき操作と拒否すべき操作を同じ規則で確かめます。
実習のpermissionsは社員ごとの操作の一覧です。allowedで、指定されたuserに許可された一覧を取り出し、operationがその中にあるかを調べます。get(user, [])は未登録なら空の一覧を返し、inは一覧にあるか確かめる書き方です。本人の勤怠と経理の給与は許可し、他部署や未登録者を拒否する四条件を比べます。
- 利用者の操作一覧を読む
- 求めた操作が一覧にあるか
- 許可と拒否の四条件を比較
読む人・書類・期限など、今回必要な条件を整理する
全員に必要な条件と、一部の人だけに必要な条件を分けます。コードで判断する課題では、利用者が利用可能か、会社・役割・書類の公開状態が今回の条件に合うかを確認します。持ち主だけでよいのか、読む許可を渡された人も含むのかも依頼から決めます。例えば、同じ部署の持ち主か、持ち主から読む許可を渡された人だけが書類を読めるなら、部署が同じことは両方の人に必要です。「15時より前」は15時ちょうどを含まず、「予算以内」は上限と同じ金額を含みます。支払いの承認なら、承認する役割に加え、頼んだ人とは別の人かも比べます。前の課題の例外をそのまま使わないでください。
矢印の順に、何が行われるかを読みます。
- 共通の条件:所属など、全員に必要なこと
- その人の条件:持ち主・委任先・承認者など
- 今回の制限:期限や上限の境界も確認
前の実習の持ち主ルールをそのまま使いません。今回の依頼を読み、全条件がそろう例と、一つ欠ける例を比べます。
- 全員が満たす条件を先に書き、その後に持ち主だけ、許可を渡された人だけ、承認者だけに必要な条件を書きます。
- コードの課題では、会社・役割・公開状態・持ち主などを一つ変え、true(許可)とfalse(拒否)がどう変わるか比べます。期限がある依頼では期限の直前・ちょうど・直後、金額の上限がある依頼では上限より少ない・同じ・多い場合を比べます。
- 支払いの承認を扱う依頼なら、申請者と承認者が同じ人の場合や、既に処理済みの場合も考えます。期限や承認者の条件がないコードの課題へ、これらの別案件の条件を加えないでください。
ここでは実務で条件が増えた場合の考え方も紹介しました。今回の実習で操作する範囲は、次の「自分のパソコンで確かめる」で確認します。追加の別課題を提出する必要はありません。
ログイン済みでも、他人の書類を返さない条件を確かめる
本文の知識を、この実習でどう使うか
ログインの確認と、今回の操作を許す判断は別です。権限表は利用者ごとにできる操作を並べた一覧です。
- 利用者と操作
- その人の権限表
- 許可または拒否
結果が違ったときに考えること:利用者名が登録されているだけでは全操作を許せません。未登録者は空の一覧として扱い、必要な操作が含まれるかを調べます。
AさんとBさんはそれぞれ自分の書類だけを読め、他人の書類と未登録者の要求は拒否する。
WindowsまたはMacの操作手順、準備に失敗したときの確認方法、実行コマンドは実習画面に用意しています。ページ下部の「準備から実習を始める」から進んでください。
この実習の架空データで確認した結果です。実際の利用者や本番システムの安全性を保証しません。