Ограничение доступа пользователей по IP-адресу в Laravel

В данной статье рассмотрим, как ограничить доступ пользователя с 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 адресу запрещён доступ к маршруту, то он увидит только ошибку доступа.