Я для подобной задачи поступал следующим образом:
создавал
scope (можно даже глобальный) который можно подключить в методе boot класса модели. Например:
//...
class Order extends Model
{
protected static function boot()
{
parent::boot();
static::addGlobalScope('owner', function (Builder $builder) {
$user = Auth::user();
if (! $user->isAdmin()) {
$builder->where('user_id', $user->id);
}
});
}
}
Теперь при каждом обращении к order-ам, будет проверятся условие является ли юзер админом, если нет то добавится к запросу условие $builder->where('user_id', $user->id) .
Не совсем хорошо использовать такую логику в моделях, но мне было удобно, и задачу решало,+ работает при обновлении, удалении, просмотре одного, просмотре списка и нечего дополнительно писать не надо.