項 1 / 8
目的と使う場面を知る
何ができるようになるか、何のために学ぶかを確認します。
今回できるようになること
利用者と書類が存在し、会社と持ち主が同じときだけ許可する条件を書き、許可・拒否・情報不足を同じコードで確認する。
この節で学ぶ理由と、前後の節とのつながり
このセクションの位置づけ
なぜ、今これを学ぶのか
同じ会社の自分の書類だけを読みたいとき、プログラムにどう判断してもらうかを考えます。
この後、何につながるか
会社と持ち主を比べるコードが書けたら、次は管理者と一般社員で読める書類を分ける条件を加えます。
実務では、どんな場面?
書類アプリに渡す利用者の情報(actor)と書類の情報(report)を使い、canReadという関数の誤りを直します。本文と同じJavaScriptを、自分のパソコンのNode.jsという実行ソフトで動かします。ログイン済みならactorに利用者情報が入り、未ログインならnullになるという前提の練習です。
読み始める前に:この節の前提と言葉
同じ会社の自分の書類だけを読みたいとき、プログラムにどう判断してもらうかを考えます。
- 情報がないことを表す値
- 条件が成り立つ場合の処理を指定する命令
コードの中では、扱う情報に名前を付けます。これを変数といいます。この実習ではactorが利用者の情報、reportが書類の情報です。actor.idは利用者のID、report.ownerIdは書類の持ち主のIDを取り出す書き方です。IDは人や書類を見分ける値であり、IDを知っているだけで読む許可があるとは限りません。は、その利用者や書類の情報がないことを表します。
並んだ項目を見比べ、違う点と同じ点を読み取ります。
- actor.id:操作する人のID
- report.ownerId:書類の持ち主のID
会社は両方のtenantIdで比べます。項目名は、どの情報を読むかの目印です。
- 情報があるか
- 会社を比べる
- 所有者を比べる
- 許可か拒否を返す
===は、左右の値が同じかを比べる記号です。 actor.id === report.ownerId;は「利用者のIDと持ち主のIDを比べ、同じなら、違えばを返して処理を終える」と読みます。は結果を返す命令です。この実習では、返したを「書類を読んでよい」、を「読んではいけない」として使います。
最初の問いに「はい」か「いいえ」で答え、対応する矢印をたどります。
- IDが一致するか:===で比べる
- 一致する:trueを返す
- 一致しない:falseを返す
returnは結果を返して処理を終える命令です。代入の=とは別です。
利用者の情報がない(actorが)ときにactor.idを読もうとすると、エラーになります。 (actor === ) ;を先に書くと、情報がない場合は読む許可を出さずに終われます。は、指定した条件が成り立つ場合に処理を行う命令です。&&は左右の条件が両方成り立つこと、||は少なくとも一方が成り立つことを表します。「会社も持ち主も同じ」を確かめたいときに||を使うと、一方だけ合う人も通してしまいます。
最初の問いに「はい」か「いいえ」で答え、対応する矢印をたどります。
- actorはあるか:項目を読む前に確かめる
- ある:idなどの項目を読む
- ない:null:拒否して処理を終える
情報がないままactor.idを読むとエラーになります。拒否の判断と実行エラーは別です。
この節では、一つのcanReadに必要な確認を足します。最初に利用者と書類が存在するかを確かめ、どちらかがなら拒否します。次に会社のID(tenantId)と持ち主のIDが両方同じかを確かめます。実習では自分のパソコンにNode.jsを用意し、本文と同じを書いたrepair.mjsを修正します。check.mjsを実行すると六つの入力で結果を確認できます。最初の誤りを観察し、修正して同じ六つを再実行する、一つの実習です。会社のIDや利用者の情報は教材の架空データです。
矢印の順に、何が行われるかを読みます。
- 段階1:持ち主:本人の書類だけ許可する
- 段階2:情報の有無:情報がない場合も確かめる
- 段階3:会社:別会社の書類も区別する
矢印は練習する順番です。段階2以降のコードでは、情報があるかを先に調べてから、持ち主や会社を読み取ります。
説明から操作へ:どの欄を、なぜ変えるか
最初の段階1では二つの場面だけを検査し、初期コードで通ります。まだ完成ではありません。段階2で情報なし、段階3で別会社の場面を足すと、確認不足が見つかります。
段階1のまま実行し、actor.id(利用者)とreport.ownerId(持ち主)の一致を見ます。
コードを変えず段階を2へ。は情報がない状態なので、その中のidを読もうとすると失敗します。先頭に (actor === || report === ) ; を足します。
段階3へ進み、会社が同じという条件 actor.tenantId === report.tenantId を && で持ち主の一致につなぎます。
五つの結果を見て、本人は許可、他人・別会社・情報なしは拒否と説明します。実行欄には全体でなく中身だけを書きます。
(actor === || report === ) ;
actor.tenantId === report.tenantId && actor.id === report.ownerId;この例の項目と手順を詳しく読む
- 練習段階:1 所有者、2 存在確認、3 会社も確認(stage)
- 1は本人と他人、2はさらに利用者なし・書類なし、3はさらに別会社を確かめます。途中の一致は、その段階で調べた範囲だけです。
- ・・===・&&などを使うコード(code)
- actorは利用者、reportは書類。===は一致、&&は両方、||はどちらか、 は許可、 は拒否です。の情報を読む前に存在を確かめます。
別の条件で使う準備
既存の認可コードとHTTPでの検証へ進む
- 利用者と書類にどの情報があり、誰が読めるルールか確認します。
- 利用者なし、本人、他人、別会社の場面でコードの結果を比べます。
- どのifの条件でtrueまたはfalseになったか順に説明します。
ここでは実務で条件が増えた場合の考え方も紹介しました。今回の実習で操作する範囲は、次の「自分のパソコンで確かめる」で確認します。追加の別課題を提出する必要はありません。
他人や別の会社の書類を返してしまうJavaScriptを直す
本文の知識を、この実習でどう使うか
利用者と書類の情報がなければ、会社や持ち主を比較できません。情報の有無を先に調べ、その後で二つのIDを比較します。
- 利用者と書類
- 存在・会社・持ち主を確認
- 六つの結果を比較
結果が違ったときに考えること:IDだけが同じ別会社の例と、情報がの例を見ます。実行エラーで止まることは、正しく拒否できたこととは違います。
利用者と書類が存在し、会社と持ち主が同じときだけ許可する条件を書き、許可・拒否・情報不足を同じコードで確認する。
WindowsまたはMacの操作手順、準備に失敗したときの確認方法、実行コマンドは実習画面に用意しています。ページ下部の「準備から実習を始める」から進んでください。
関数の練習です。ログイン処理そのものや通信は実装していません。提出された実行結果は自己申告として扱い、他のシステムでも独力で直せることの証明とはしません。