Help us understand the problem. What is going on with this article?

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

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

①対処

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


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

kmmns
某感染症の影響でJava→PHPメインの業務になったため勉強中です。 業務などに活かせる便利な仕組みなど共有したいと思ってます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした