Laravel проверка прав пользователя
Есть маршрут, в который передаётся имя пользователя и slug задачи
Route::get('/task/{username}/{slug}', [TaskController::class, 'task'])->name('task');
Мне нужно сделать так, чтобы никакой другой пользователь не смог просмотреть эту задачу. Т.е мне нужно что бы только пользователь, который указан в url, смог просматривать задачу
Получается сделать вот таким образом, но мне кажется это костыль и у Laravel есть специальный инструмент для этого
public function task($username, $slug)
{
$to_user = User::whereName($username)->first();
$user = Auth::user();
if ($user->name == $to_user->name) {
return view('profile.task');
}
return redirect('/');
}
Ответы (1 шт):
В таких случая лучше использовать middleware
Создаем
middlewareclass TaskMiddleware {
public function handle(Request $request, \Closure $next) { $username = $request->route()->parameter('username'); if($username !== \Auth::getName()) { abort(403); } return $next($request); } }Регистрируем его в роуте
Route::middleware(\App\Http\Middleware\TaskMiddleware::class)->get('/task/{username}/{slug}', [TaskController::class, 'task'])->name('task');В самом контроллере реализовываем логику обработки отображения самой задачи
Почему стоит выбрать такой вариант: В случае если вам нужно будет реализовать функционал для разрешений пользователей. К примеру вам завтра поставят задачу "Вот сделай так само но нужно еще чтобы мой аккаунт видел ВСЕ задачи" - вы просто меняете логику мидлвера, а не ищите в контроллерах где именно вы еще используете подобную логику.