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