項 1 / 7
目的と使う場面を知る
何ができるようになるか、何のために学ぶかを確認します。
今回できるようになること
管理者でも別会社は拒否し、本人と自社管理者は許可する。
この節で学ぶ理由と、前後の節とのつながり
このセクションの位置づけ
なぜ、今これを学ぶのか
前の節では、会社と持ち主を比べるコードを書きました。今回は、同じ会社の管理者なら他の社員の書類も読める、という条件を加えます。まずはサーバーへの通信を行わず、コードの判断だけを試します。
ここまでの知識をどう使うか
ログインと読む許可の違いに、「同じ会社か」「管理者か」という条件を加えます。やの読み方も、この節の例で確認できます。
この後、何につながるか
判断するコードが正しくても、書類を返す前に使わなければ意味がありません。次はサーバーへ要求を送り、返事を見て確かめます。
この実習で確かめること
本人、他人、別の会社の人、書類がない場合を分けて判断するコードと実行結果
実務では、どんな場面?
会社と管理者の条件をJavaScriptへ書くため、自分のパソコンで実際に処理して比較します。
読み始める前に:この節の前提と言葉
コードは「入力を受け取り、規則を確かめ、許可か拒否を返す」順で読みます。先に使う記号を確認してから、同じ規則を複数の条件で試します。プログラム全体を書き始める必要はありません。
- ・引数・戻り値
- は入力から結果を返す処理のまとまり。ここではcanReadというに、利用者actorと書類reportが渡されます。戻り値が許可、が拒否です。
- プロパティ・ドット
- actor.idは利用者情報のid、report.ownerは書類の持ち主を読む書き方です。この実習の項目名はownerとtenantです。前の節のownerId・tenantIdとは名前が違うので、開いているファイルの名前に合わせます。
- tenantId・role
- tenantは会社の識別子、roleは役割です。adminは管理者ですが、今回の規則では自分の会社だけを管理します。前の節では会社の項目にtenantIdという名前を使いました。
- ・・
- は対象が存在しないことを表す値。とは条件が成り立つかを表す値です。文字列の""ではなく、引用符なしのを使います。
- ・
- は条件がのときに次の処理をする記法。はその値を返してを終えます。の後に書かれた処理は、その実行では通りません。
- 比較と論理演算
- ===は同じか、!==は異なるか、&&は両方必要、||はいずれかでよい、!は真偽の反転です。=は値を入れる記号です。今回はをNode.jsで実行します。
今回は、一般利用者は自分の会社にある自分の書類だけを読めます。会社の管理者は、自分の会社の書類を読めます。別の会社の書類は、管理者でも読めません。
利用者や書類が存在しない場合も許可しません。他人との共有、委任、全社を管理する特別な役割は、今回のルールにはありません。以前の仕事の例外を、勝手に足さないようにします。
並んだ項目は、別々に確認する観点です。操作する順番ではありません。
- 一般利用者:同じ会社の自分の書類
- 会社の管理者:同じ会社の書類
- 別の会社:管理者でも読めない
利用者や書類がない場合も許可しません。今回のルールにない例外は足しません。
判断の順番:役職の前に、どの会社かを確かめる
下の条件を上から確認し、当てはまる行で許可か拒否を返して終了します。終了した後の行には進みません。管理者かどうかだけを先に見て許可すると、別の会社の書類まで返してしまいます。
この例の項目と手順を詳しく読む
- 利用者か書類がない
- 拒否して終了。存在しないもののidを読まない。
- 両方あるが、組織が違う
- 役割にかかわらず拒否して終了。
- 同じ組織の管理者
- この節の規則では許可。
- 同じ組織の一般利用者
- 所有者が本人なら許可、他人なら拒否。
今回のexercise.mjsではactorのidが利用者、tenantが会社、roleが役割です。reportのownerが書類の持ち主、tenantが会社です。前の節のtenantId・ownerIdとは名前が違うため、このファイルにある名前を使います。
canReadは情報を受け取り、(許可)か(拒否)を返すです。最初のは情報がない場合を止めます。その後ので、同じ会社であり、かつ本人か管理者である条件を判断します。&&は両方、||はどちらか、かっこはまとめて判断する範囲です。実際のログインは行いません。
- actorとreportを受け取る
- 会社と本人・役割を比較
- trueかfalseを返す
最初のコードは管理者であるか、持ち主のIDが合えば許可します。会社の比較がないため、別会社の管理者も通ります。最初のresult.jsonを見て、どの例が予測と違うか記録します。
会社の条件を追加した後、本人と自社管理者は許可され、別会社の管理者は拒否されるか確認します。一つのへ修正を加え、同じ五つの条件で再実行します。
- 別会社の管理者も試す
- 会社の一致を必須にする
- 本人・自社管理者の許可も残す
読む人・書類・期限など、今回必要な条件を整理する
全員に必要な条件と、一部の人だけに必要な条件を分けます。コードで判断する課題では、利用者が利用可能か、会社・役割・書類の公開状態が今回の条件に合うかを確認します。持ち主だけでよいのか、読む許可を渡された人も含むのかも依頼から決めます。例えば、同じ部署の持ち主か、持ち主から読む許可を渡された人だけが書類を読めるなら、部署が同じことは両方の人に必要です。「15時より前」は15時ちょうどを含まず、「予算以内」は上限と同じ金額を含みます。支払いの承認なら、承認する役割に加え、頼んだ人とは別の人かも比べます。前の課題の例外をそのまま使わないでください。
矢印の順に、何が行われるかを読みます。
- 共通の条件:所属など、全員に必要なこと
- その人の条件:持ち主・委任先・承認者など
- 今回の制限:期限や上限の境界も確認
前の実習の持ち主ルールをそのまま使いません。今回の依頼を読み、全条件がそろう例と、一つ欠ける例を比べます。
- 全員が満たす条件を先に書き、その後に持ち主だけ、許可を渡された人だけ、承認者だけに必要な条件を書きます。
- コードの課題では、会社・役割・公開状態・持ち主などを一つ変え、true(許可)とfalse(拒否)がどう変わるか比べます。期限がある依頼では期限の直前・ちょうど・直後、金額の上限がある依頼では上限より少ない・同じ・多い場合を比べます。
- 支払いの承認を扱う依頼なら、申請者と承認者が同じ人の場合や、既に処理済みの場合も考えます。期限や承認者の条件がないコードの課題へ、これらの別案件の条件を加えないでください。
ここでは実務で条件が増えた場合の考え方も紹介しました。今回の実習で操作する範囲は、次の「自分のパソコンで確かめる」で確認します。追加の別課題を提出する必要はありません。
会社と管理者の条件をJavaScriptへ書く
本文の知識を、この実習でどう使うか
管理者の権限は自分の会社の中だけです。「会社が同じ」と「本人または管理者」を両方満たす必要があります。
- 会社の一致
- 本人または自社管理者
- 許可する範囲
結果が違ったときに考えること:かっこがないと管理者だけが会社の条件を飛び越える式になることがあります。別会社の管理者を必ず比較します。
管理者でも別会社は拒否し、本人と自社管理者は許可する。
WindowsまたはMacの操作手順、準備に失敗したときの確認方法、実行コマンドは実習画面に用意しています。ページ下部の「準備から実習を始める」から進んでください。
架空の値だけを使います。この一つの実験の成功から、本番の安全性を断定しません。