Запретить пользователю доступ к некоторым маршрутам в Laravel

Работаю над приложением Laravel, и у меня есть несколько маршрутов, маршруты имеют многоступенчатую форму. Мне нужно запретить пользователю доступ к последнему маршруту (который направляет на последнюю страницу формы) перед доступом или заполнением предыдущих маршрутов.

Маршруты

Route::get( '/first', 'TrController@payQuote')->name('b2c.payquote');
Route::get( '/second', 'TrController@emailQuote')->name('b2c.sendquote');
Route::get( '/receipt', 'TrController@getReceipt')->name('b2c.receipt');
Route::get( '/success', 'TrController@getSuccess')->name('b2c.success');

Вообще говоря, у вас может быть промежуточное программное обеспечение, которое проверяет, был ли предыдущий маршрут завершен пользователем. Однако то, что будет содержать это промежуточное ПО, во многом зависит от того, как вы все реализовали. Я предполагаю, что результаты первой секунды и части квитанции хранятся в сеансе или в базе данных, поэтому вы можете получить их в промежуточном программном обеспечении.

apokryfos 10.01.2019 10:58
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
1
911
2

Ответы 2

Есть несколько способов сделать это. Один из способов может заключаться в том, что вы можете проверить http-реферер на последней странице, и если это маршрут, предшествующий последнему, вы разрешите ему в противном случае перенаправить его на предыдущую страницу. Это можно реализовать для каждой страницы.

Другим способом может быть база данных. Для каждого посещения страницы вы можете иметь запись в базе данных и проверять на следующей странице, есть ли запись, в противном случае перенаправить его туда, куда вы хотите.

,, Спасибо, на ваше предложение, как я могу использовать http-referrer, чтобы предотвратить доступ пользователя к последней странице перед заполнением любой из предыдущих страниц ..

Martin 10.01.2019 10:13

В вашем контроллере проверьте url () -> previous () или URL :: previous (), или у вас может быть промежуточное ПО для проверки того же. laravel.com/docs/5.7/helpers#method-url

guttume 10.01.2019 10:17

Или, если вы можете применить промежуточное программное обеспечение к последнему маршруту, чтобы проверить это, вместо того, чтобы входить в контроллер. Также - не ответ, но вместо того, чтобы использовать несколько страниц, вы могли бы посмотреть что-то еще на одной странице. Взгляните на пример Chaining modals (queue) по этой ссылке: sweetalert2.github.io/#examples

Petay87 10.01.2019 10:20

Вы можете создать класс промежуточного программного обеспечения, а затем использовать его непосредственно в вашем файле routes.

Пример:

<?php

namespace App\Http\Middleware;

use Closure;

class CheckPermission
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // TODO: Add your logic here.

        if ($request->age <= 200) {
            return redirect('home');
        }

        return $next($request);
    }
}

Затем в вашем файле маршрутов:

Route::get('admin/profile', function () {
    //
})->middleware(CheckPermission::class);

битый на 55 сек, кстати, вот ссылка: laravel.com/docs/5.7/middleware

javier_domenech 10.01.2019 10:19

Другие вопросы по теме