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 ヘルパ

社労士のための「ほどほど」お悩み相談室

あなたのご質問・ご相談に、月1回、無料・本音で回答します。

ご質問・ご相談は、登録後に届くメールから送っていただけます。費用は一切かかりません。「お悩み相談室」というクローズドな場だからこそ、踏み込んだ内容の質問にも回答できます。

これまでに、こんなご質問・ご相談に回答してきました。

  • コンサル(3号業務)を主力業務にするには、どうすれば良いか?
  • どのようにして顧問料を上げれば良いか?
  • 営業が苦手で、新規の顧客獲得ができない
  • 業務をどう絞り込めば良いか?
  • 一人社労士のままで良いのか、人を雇うべきか?
  • 苦手・相性の悪い顧問先と、どう付き合うか?
  • 生成AIの時代、社労士は今後どう生き残るか?

なぜ、無料で同業の社労士からの相談に乗るのか?

それは「本当に顧客のために活動できる社労士仲間を増やしたい」からです。

私自身、社労士という資格に誇りを持っています。企業からの社労士に対する不満をよく聞きますし、「社労士なんて役に立たない」と思われることは、正直悔しいです。

  • 信頼される・信頼できる社労士の仲間を増やしていきたい

そんな想いから、少しでも社労士業界全体のレベルアップに貢献できればと考えています。

    登録は無料・月1回配信・配信解除いつでも可能
    ※ 登録後、本人確認のメールをお送りします。届かない場合は迷惑メールフォルダもご確認ください。


    up_line