coucou, j'ai un problème avec des boucles de requêtes quand je fais une manip que je trouve assez standart (mais google ne m'a pas donné de solution) :
j'essaie de construire un CMS avec Laravel.
j'ai suivi la doc pour l'Authorization et crée une classe PagePolicy : https://laravel.com/docs/5.5/authorization
Je veux vérifier les permissions de l'user courant pour le modèle Page :
class PagePolicy
{
use HandlesAuthorization;
public function before(User $user, $ability)
{
if ($user->hasRole('SuperAdmin')){
return true;
}
}
public function create(User $user)
{
return Auth::check();
}
public function update(User $user, Page $page)
{
return $user->id === $page->user_id;
}
public function delete(User $user, Page $page)
{
return $user->id === $page->user_id;
}
}
la méthode $user->hasRole ressemble à ça :
public function hasRole($role)
{
return $this->roles()->where('name', $role)->count();
}
ensuite dans mon template blade je veux un index de toutes les pages avec les boutons edit et delete seulement si j'ai les permissions nécessaires, ce qui donne un page.index.blade comme ça :
@foreach($pages as $page)
<div>
<h2>{{ $page->title }}</h2>
@can('update', $page)
<a href="{{ route('pages.edit',$page) }}">Edit</a>
@endcan
@can('delete', $page)
<a href="{{ route('pages.delete',$page) }}">Delete</a>
@endcan
</div>
@endforeach
ça marche, mais pour 10 pages j'ai 20 requêtes SQL et ce sont toutes les même : celle qui check si je suis SuperAdmin ($this->roles()->where('name', $role)->count();)
Comment faire pour vérifier mes permissions en évitant les requêtes inutiles ?