В данной статье рассмотрим, как ограничить доступ пользователя с IP-адреса к маршруту в Laravel 9 с показом сообщения об ограничении.
Для этого создадим свой middleware.
Создание Middleware блокировки IP
Открываем консоль, запускаем команду php artisan
для создания нового Middleware
:
php artisan make:middleware BlockIpMiddleware
Затем переходим к файлу конфигурации app/Http/Middleware/BlockIpMiddleware.php
и заменяем весь код следующим кодом:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class BlockIpMiddleware
{
public $blockIps = ['127.0.0.1', '127.0.0.2']; // ip адреса которым запрещён доступ
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next)
{
if (in_array($request->ip(), $this->blockIps)) {
abort(403, "Вам запрещен доступ к этому сайту.");
}
return $next($request);
}
}
Добавление Middleware в ядро
На этом последнем шаге нужно зарегистрировать класс BlockIpMiddleware
под именем blockIP
в массиве $routeMiddleware
в файле app/Http/Kernel.php
:
protected $routeMiddleware = [
// ....
'blockIP' => \App\Http\Middleware\BlockIpMiddleware::class,
];
Использование Middleware
Теперь можно использовать middleware
blockIP
для блокировки доступа к маршруту в routes/web.php
:
<?php
Route::middleware(['blockIP'])->group(function () {
Route::resource('users', UserController::class);
});
Готово! Если IP адресу запрещён доступ к маршруту, то он увидит только ошибку доступа.