我正在构建任务应用程序。 它具有任务表:
tasks
--------
id
title
description
,还有user_tasks表,该表显示已完成任务的用户
user_tasks
--------
id
task_id
user_id
任务模型具有显示由用户完成的任务的方法
public function answered()
{
return $this->hasOne('App\UserTask')->where('user_id', Auth::id());
}
因此,我的目标是开发一种中间件,以保护未完成的下一个任务(如果未针对特定用户执行)。如果用户未使用 id-1 完成任务,则无法使用 id-2 来启动任务。
答案 0 :(得分:0)
查看文档。 It's really clear。
php artisan make:middleware CheckIfUserHasPendingTasks
app / Http / Middleware / 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);
}
}
app / Http / Kernel.php
protected $routeMiddleware = [
// ...
'task.check' => \App\Http\Middleware\CheckIfUserHasPendingTasks::class, // <--
];
routes / api.php //或 routes / web.php
Route::post('a/cool/route', 'a/cool/controller@aFancyMethod')
->middleware('task.check'); // <--
您怎么知道哪个Task
属于特定的User
?我认为user_id
应该存储在Task
模型中(除非User
和Task
建立多对多关系(?)