Я пытаюсь отфильтровать коллекции моделей Eloquent на основе того, имеет ли пользователь доступ к модели или нет.Filtering Eloquent
Мой текущий метод работает, но он очень медленный, поэтому мне интересно, есть ли более эффективный способ сделать это?
У меня есть метод userHasAccess()
на каждой модели в коллекции. Он использует Laravel в ACL Функции, чтобы определить, если пользователь имеет доступ к модели:
public function userHasAccess()
{
if (Auth::user()->can('show', $this)) {
return true;
}
return false;
}
Я тогда переопределить метод newCollection()
на модели:
public function newCollection(array $models = Array())
{
$collection = new Collection($models);
$collection = $collection->filter(function($model)
{
if($model->userHasAccess())
return true;
});
return $collection;
}
Метод политики выглядит следующим образом:
public function show(User $user, Quote $quote)
{
if(!$quote->customer)
return false;
if(($user->id === $quote->user_id))
return true;
if($user->hasRole(['super-admin','admin']))
return true;
return false;
}
Есть ли лучший способ сделать это? Особенно с точки зрения производительности?
Спасибо - я закончил делать что-то подобное, поэтому спасибо за подтверждение моего направления. Мне также нравится идея использования области запроса. – HPage