※当サイトはリンクに広告ページが含まれている場合があります
PHPのフレームワーク「Laravel」で顧問先のみが閲覧できるWebアプリを構築・運営していますが、せっかくなので便利そうな機能を少しずつ加えていってます。今回はその備忘録的なものです。
公開記事と下書き記事を出し分けたい
実現したかったのは、シンプルに以下のことだけです。
- 公開の記事は、ログインした人が全員見ることができる
- 下書きの記事は、管理者しか見ることができない
ブログなどでは一般的な処理です。
といっても、構築しているアプリで記事を投稿するのは私だけなので、公開するときにアップすれば良いのですが。。。
まあ、趣味的な改良とも言えますが、常に技術の研鑽は必要ですし、得てしてこういうときに新たな発見もあるものです。
処理の流れ
処理の流れとして考えたことは以下のとおり。
- ログインするので、認証済みのユーザー情報は取得できる
- ユーザー権限を管理者(role:0)と一般(role:1)の2つに分ける
- 管理者権限の場合の処理と、一般権限の場合の処理の2つを、Controllerでifを用いて分岐させて処理
- bladeでは受け取るだけでよい
認証済みユーザーの情報取得
処理の流れはすぐにまとまったのですが、ここで不思議なことに気づきました。
- bladeでは「Auth::user()->name」などで普通に認証済みユーザーの情報を取得できる
- Controllerではどうやって取得するんだろう・・・?
調べてみたら、「Laravel 認証済みユーザーの取得方法」がヒット。
自分自身ファサードをきちんと理解できていなかったことに気づきました😅
最も簡単なのは、auth関数(ヘルパ)を使うことでしょう。Authファサードの代わりに使用できますし。
// 現在認証しているユーザーを取得
$user = auth()->user();
// 現在認証しているユーザーの権限(role)を取得
$role = auth()->user()->role;
公開と下書きで条件分岐
あとは、DBのカラムとして、公開状態と下書き状態を管理する「publish」を作って、公開なら1、下書きなら0としておけば、取得したrole情報を使って、ifで分岐してDBから取り出すだけです。
// 管理者の場合は下書きも表示、会員の場合は公開のみ表示
if ($role == 0) {
$posts = Post::orderBy('id', 'desc')->paginate(5);
} else {
$posts = Post::where('publish', '1')->orderBy('id', 'desc')->paginate(5);
}
まとめ
1度やり方を知ってしまうと、当たり前の処理にしか思えません🤣
ただ、最初はbladeの方で処理の出し分けを考えてしまい、結局ペジネーションでどうにも解決不能な問題があることに気づき、今回の方法に至りました。
論理的に考える癖がつきますし、本当にプログラムはオススメです。
しかし、ヘルパ関数は便利すぎるし、こんな機能があったらいいな・・・と思ったら必ず用意されているLaravel、恐るべしです。
- 毎年のように改正される労働法令への対応に頭を悩ませている
- 総務や経理などの他の業務を兼務しているので、人事労務業務だけに時間を割けない
といった悩みを抱える企業の経営者・人事労務担当者向けに、公開型のブログでは書けない、本音を交えた人事労務に関する情報・ノウハウ、時期的なトピックに関するメールマガジンを「無料」で配信しています。
過去の配信分は公開しません。
情報が必要な方は、いますぐ以下のフォームから購読の登録をしてください。購読して不要と思ったら簡単に解除できますのでご安心ください。