プログラミング奮闘記

難しいと評判!初心者がN予備校でプログラミングを学んだ感想と備忘録!
No.36:管理人機能の実装

N予備校 プログラミングコース 第36回

あなたは2019年の目標って立てましたか?
どんな目標を立てたか覚えていますか?

私は2018年末に2019年の目標を立てました。
その一つにプログラミングを学び仕事として使えるようにすることをあげました。
そして、思い立ったが吉日と「N予備校のプログラミングコース」を申し込みました。

そして受講と同時に自身のふり返りと、これから始めようと考えている人の参考になればとブログを書き始めました。
今回ブログの移設にともない、再度そのブログを読み返しながら、今思うことを加えて記載していきたいと思います。

また私が受講したのは【2018年度】で、現在公開されている【2019年度】との違いについても書いていきたいと思います。

このブログは、初心者が学びながら書いているため、間違っている場合があります。
分かり次第修正していくつもりです。

そのあたりも含め楽しんでいただければと思います。 

最後に進めていてわからなかったところや気になったところをまとめています。

プログラミング入門 webアプリコース 第36回

前回は、自身の投稿した内容を削除できる機能を実装します。
今回は、管理人機能を実装します。

  • 今回の内容まとめ(第3章 25)
    ・管理人機能の実装

  • 今回の目標
    管理人機能の実装

秘密の匿名掲示板の要件

作成する秘密の匿名掲示板の要件が以下になります。 

前回までに、要件である① 認証ができる」「② 認証した人だけが投稿内容を閲覧できる」「③ 認証した人だけが投稿できる」「⑥ 匿名であるけれども同じユーザーであることを認識でき、一人で複数人が書き込んでいるような振る舞いが簡単にはできないようにする。」「④ 自身の投稿内容を削除できる
機能、そして投稿内容を保存する機能を実装しました。
今回は、⑤「管理人機能」を実装します。

管理人機能の実装

掲示板には様々な投稿がされ、中には法律違反の内容が書き込まれる危険性があります。
もしそういった法律違反の内容等が投稿された際に、管理人は事前に削除したり、問題を調査する必要があります。
そのため、管理人機能の実装が必要になります。

今回、管理人機能で実装する要件は以下の3つです。

  • 管理人の投稿だとわかる
  • 管理人は全ての投稿を削除できる
  • 管理人はどのアカウントの投稿かわかる

管理人による投稿機能

管理人による投稿がわかるような機能を実装します。

1 – var isPostedByAdmin = (post.postedBy === ‘admin’)
2 if isPostedByAdmin
3 h3 #{post.id} : 管理人 ★
4 else
5 h3 #{post.id} : ID:#{post.trackingCookie}

1行目で、post.postedBy(投稿するユーザー名)がadmin(管理者名)と一致するかどうかのフラグ変数をisPostedByAdminと設定します。

2~3行目で、設定したフラグ変数isPostedByAdminがtrueである(post.postedByとadminが一致する)場合に、管理人★と表示するように設定し

4~5行目で、設定したフラグ変数isPostedByAdminがFalse(post.postedByとadminが一致しない)場合に、投稿者のトラッキングIDを表示するように設定しています。

これにより、以下のように管理者の投稿がわかるようになります。

管理人の削除機能実装

続いて、管理人はすべての投稿を削除できるような機能を実装します。

  • var isDeletable = (user === post.postedBy ||
    user === ‘admin’)

この設定で、user(アクセスしているユーザー名)がpost.postedBy(投稿した本人)またはadmin(管理人)であることをフラグ isDeletableに設定しています。

これにより、isDeletableが trueである条件が「本人または管理人のとき」に設定されるので、管理人でも削除ボタンが表示されるようになります。

続いて、前回設定した[サーバー側の削除機能]((https://www.goodambition.biz/struggle-for-programming-35/)を以下のように変更します。

1 Post.findByPk(id).then((post) => {
2 if (req.user === post.postedBy ||
                req.user === ‘admin’) {
3  post.destroy().then(() => {
4  handleRedirectPosts(req, res);
5 });  }  });

2行目で、req.user(アクセスしているユーザー名)がpost.postedBy(投稿したユーザー名)またはadmin(管理者)である場合に3-4行目が実行されるように設定しています。

これにより、投稿者本人と管理者が削除をできるようになります。

管理人はどのアカウントの投稿かわかる

最後に、管理人は各投稿がどのアカウントによっての投稿かがわかる機能を実装します。

1 – var isAdmin = (user === ‘admin’)
2 if isAdmin
3 p 投稿者: #{post.postedBy}
4 – var isDeletable = (user === post.postedBy
                      || isAdmin)
1行目で、user(ユーザー名)がadmin(管理者)と一致しているかのフラグisAdminを設定します。

2行目で、isAdminがtrue(今アクセスしているユーザーが管理人)である場合に3行目が実行されるようになります。

3行目で、投稿者を表示するように設定し

4行目では、isDeletable フラグの条件の部分も、 isAdmin フラグを利用するよう変更してあります。

以上で、次の図のように管理人は投稿したIDがわかるようになります。

これで「管理人の投稿だとわかる」「管理人は全ての投稿を削除できる」「管理人はどのアカウントの投稿かわかる」という管理人機能を実装できました。


今回まで、5回にわたって秘密の匿名機能の要件である、投稿機能投稿内容の保存機能匿名機能削除機能管理人機能を実装してきました。
これで、まだセキュリティの問題はあるものの秘密の掲示板機能は全て実装できました。
次回は、掲示板の見た目を改善します。

 

ABOUT ME
GoodAmbition
オンライン塾経営者(大阪大学工学部出身の元開発技術者) 自身も家庭教師や塾講師として働きつつ、後輩の育成やオンライン塾を経営しています。 私自身も約10年にわたり家庭教師や塾講師として100人以上の受験生と向き合ってきました。 色々な学生、保護者の方とかかわる中でよく質問される内容や、受験に必要な内容について書いています。 独学で頑張っている人たちへ勉強計画や悩み相談なども受け付けていますので気軽にお問い合わせください。 就職活動や資格の勉強などで悩んでいる方もご連絡ください。 教育・就活、書籍、食べ歩きに関するお話がメインです。 最近取り組んでいること プログラミング、筋トレ、マラソン、ライティングスキル向上etc. 苦手なことを克服しようと頑張っています。