質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

リファクタリング

リファクタリングとはコードの本体を再構築するための手法であり、外見を変更せずに内部構造を変更/改善させることを指します。

Q&A

1回答

967閲覧

Laravelでmiddlewareのリファクタリング

laravel1221

総合スコア2

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

リファクタリング

リファクタリングとはコードの本体を再構築するための手法であり、外見を変更せずに内部構造を変更/改善させることを指します。

0グッド

0クリップ

投稿2021/12/27 03:44

編集2021/12/27 06:07

Laravelで画面制御を行なっており、middlewareで以下のように記述しました。

ログインユーザーの情報として、以下となっています。
user_id ユーザーID
role_list_flg ユーザー一覧画面権限フラグ 0or1 0=権限なし 1=権限あり
role_create_flg ユーザー登録画面権限フラグ 0or1 0=権限なし 1=権限あり

public function handle($request, Closure $next) { // ユーザー情報を変数にセット $user = Auth::user(); ### ユーザー権限 // ユーザー一覧権限 if (Route::currentRouteName() == 'user.index') { // ユーザーが一覧権限を持っていない(role_list_flgが0) if ($user->role_list_flg !== 1) { // エラーログ // ユーザーが画面アクセスの権限を持っていなければホーム画面にリダイレクト return redirect()->route('home'); } } // ユーザー登録権限 if (Route::currentRouteName() == 'user.register.view' || Route::currentRouteName() == 'user.register.post' ) { // ユーザーが登録権限を持っていない(role_create_flgが0) if ($user->role_create_flg !== 1) { // ユーザーが画面アクセスの権限を持っていなければホーム画面にリダイレクト return redirect()->route('home'); } }

上記のように現在は一つ一つの処理を書いて、アクセスしたルート名と取得したルート名が一致→ユーザーが権限を持っていなければホーム画面にリダイレクトするとしてます。
ただ、投稿の場合、コメントの場合...と処理が続いていくので、似たような記述が増えてコードが冗長と思いました。
なので、上記のコードをどのようにリファクタリングしたらよろしいでしょうか?
※上記の内容で動作することは確認済み。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

phper.k

2021/12/27 04:05

質問はなに?
laravel1221

2021/12/27 04:12

すみません。途中で質問が途切れていました。 質問は、コードのリファクタリングになります。 内容を追記いたしました。
phper.k

2021/12/27 04:53

0次のコードだとは思うんですけど、提示されたコードだと、$adminMasterUser は未定義だし、role_list_flg が何を意味を持っているのかわかんないし、少なくともこのへんの要件明らかにしてほしいし、動作しないコードでリファクタも何もないのだから、動作する状態にした上で質問してほしい
laravel1221

2021/12/27 06:08

ご指摘ありがとうございます。 上記修正いたしました。
guest

回答1

0

まずこちらの記事を査読していただきたい。
こちらの記事

この質問についてはまさにこれだなという感想です。

あなたのやりたいことは、つまり、

権限がない場合に、home にリダイレクトしたい。と言うことが本来の目的のように窺えます。

Laravel を使っている以上は、可能な限り Laravel の作法に乗っかって作るのが基本です。

こちらをご覧ください

この記事のように、Policy で権限を個別に設定します。

認可または例外を投げる

アクションを認可をチェックし、ユーザーが指定のアクションの実行を許可されていない場合は、Illuminate\Auth\Access\AuthorizationExceptionを自動で投げたい場合は、Gateファサードのauthorizeメソッドを使用します。AuthorizationExceptionのインスタンスは、Laravelの例外ハンドラによって自動的に403HTTPレスポンスへ変換されます。

ここに書いてあるように、AuthorizationException が投げられます。
デフォルトだと、これで、403 のエラーページを表示することになりますが、例外時にその処理を変える方法は、エラー処理のページに書かれています。

場当たりにコードを書いても最適なコードを書くことは不可能です。

少なくとも、熟読の必要はないとは思いますが、https://readouble.com こちらに書かれていることを通読してからでも遅くはないはずですし、全体的に Laravel の持っている機能を頭に入れた上で、コードを書く段階に進んでもらう方が効率的でしょう。

投稿2021/12/27 07:02

phper.k

総合スコア3923

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問