LoginSignup
0
1

More than 3 years have passed since last update.

【備忘録】Gate権限制御 @canでクエリ発行数が増えちゃった話+対処法

Last updated at Posted at 2020-09-15

なんだかものすごい権限参照のクエリ重複してる...

①対処

blade内の

@can

@endcan

の記述を

@if
@endif

へと変更し、判定に用いる権限の値をviewへと渡す。

ループ処理内でcanが使われていた場合、これが原因の可能性が高いですが以下に続きを...

②原因

@canによる判定をおこなう時にFacadeクラスのインスタンス化、権限参照のDBアクセスが発生します。
今回の自分の場合レコード情報と合わせてアイコン表示をする必要がありました。
この時、ループ処理内で表示/非表示の制御をしていたことからレコード数分のDBアクセスが起こっていました。

③対処例

自分の作業でおこなった対処の一例です。

1:①の通りbladeの記述を@can→@ifへ変更
2:controller側でユーザーインスタンスから権限、またはそれに相当する値を取得し、compactもしくはwithでviewへ渡す
3:bladeで受け取り判定に使用

大したことはしていませんが、手間をかけずにできたのでこの方法で解決できるパターンもあると思います。


参考記事

@Yorinton
https://qiita.com/Yorinton/items/604c5b1f3445cb23d565

公式
https://readouble.com/laravel/5.7/ja/authorization.html


以上となります。
仕様や現状の改善点など調べておりますので、備忘録ではありますが随時修正していきます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1