Просмотрите документацию. Это действительно ясно .
Создайте свое промежуточное ПО
php artisan make:middleware CheckIfUserHasPendingTasks
Настройте ваше промежуточное ПО
приложение / Http / Промежуточное / CheckIfUserHasPendingTasks.php
<?php
namespace App\Http\Middleware;
use Closure;
use App\Task;
use App\UserTask;
class CheckIfUserHasPendingTasks
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$id = auth()->id();
$last_task = Task::where('user_id', $id)->lastest()->first();
$last_completed_task = UserTask::where('user_id', $id)->lastest()->first();
if ( ! $last_task->id == $last_completed_task->task_id)
{
abort(403, 'The user has pending tasks.');
}
return $next($request);
}
}
Зарегистрируйте ваше промежуточное ПО
приложение / Http / Kernel.php
protected $routeMiddleware = [
// ...
'task.check' => \App\Http\Middleware\CheckIfUserHasPendingTasks::class, // <--
];
Примените свое промежуточное программное обеспечение
маршруты / api.php // или маршруты / web.php
Route::post('a/cool/route', 'a/cool/controller@aFancyMethod')
->middleware('task.check'); // <--
Наблюдение
Откуда вы знаете, какой Task
принадлежит определенному User
? Я думаю, что user_id
следует хранить в модели Task
(если только User
и Task
не устанавливают отношение многие ко многим (?))