Work Life Fun

仕事も人生も楽しむ社労士

Laravel:認証済みユーザーの取得とDBの出し分け方法

※当サイトはリンクに広告ページが含まれている場合があります

PHPのフレームワーク「Laravel」で顧問先のみが閲覧できるWebアプリを構築・運営していますが、せっかくなので便利そうな機能を少しずつ加えていってます。今回はその備忘録的なものです。

公開記事と下書き記事を出し分けたい

実現したかったのは、シンプルに以下のことだけです。

  • 公開の記事は、ログインした人が全員見ることができる
  • 下書きの記事は、管理者しか見ることができない

ブログなどでは一般的な処理です。

といっても、構築しているアプリで記事を投稿するのは私だけなので、公開するときにアップすれば良いのですが。。。

まあ、趣味的な改良とも言えますが、常に技術の研鑽は必要ですし、得てしてこういうときに新たな発見もあるものです。

処理の流れ

処理の流れとして考えたことは以下のとおり。

  1. ログインするので、認証済みのユーザー情報は取得できる
  2. ユーザー権限を管理者(role:0)と一般(role:1)の2つに分ける
  3. 管理者権限の場合の処理と、一般権限の場合の処理の2つを、Controllerでifを用いて分岐させて処理
  4. 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、恐るべしです。

参考:Laravel 9.x ヘルパ

【無料】効率的に人事労務の情報を入手しませんか?
  • 毎年のように改正される労働法令への対応に頭を悩ませている
  • 総務や経理などの他の業務を兼務しているので、人事労務業務だけに時間を割けない

といった悩みを抱える企業の経営者・人事労務担当者向けに、公開型のブログでは書けない、本音を交えた人事労務に関する情報・ノウハウ、時期的なトピックに関するメールマガジンを「無料」で配信しています。

過去の配信分は公開しません。

情報が必要な方は、いますぐ以下のフォームから購読の登録をしてください。購読して不要と思ったら簡単に解除できますのでご安心ください。


up_line