Я пытаюсь добавить в свой проект промежуточное программное обеспечение, которое проверяет, имеет ли пользователь доступ к проекту. Мой подход:
namespace App\Http\Middleware;
use Closure;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
class UserProjectFit
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($request->is('*/projects/*')) {
$projectUserId = DB::table('project_user')
->where('project_id', '=', $request->project['id'])
->where('user_id', '=', Auth::user()->id)
->first();
if (is_null($projectUserId)) {
abort(404);
}
}
return $next($request);
}
}
Это в основном работает, но у меня есть и маршруты, такие как e. г. projects/create
и здесь тоже включается промежуточное ПО. Идея заключалась бы в том, что промежуточное ПО предпринимает действия только в том случае, если URL содержит строку project
и идентификатор, e. г. …projects/1/…
Что было бы хорошим способом решить это? Если мой подход не очень хороший, я буду рад прочитать ваши предложения.