Как реализовать вызов разных контроллеров на одну и ту же ссылку, исходя из роли авторизованного юзера?

Для того чтобы реализовать вызов разных контроллеров на одну и ту же ссылку в зависимости от роли авторизованного пользователя, вам потребуется использовать middleware (посредник).

Middleware в Laravel позволяет обрабатывать входящие HTTP-запросы и выполнять какую-то логику до того, как они будут переданы соответствующему контроллеру. В данном случае мы можем написать middleware, который проверяет роль авторизованного пользователя и вызывает соответствующий контроллер.

Первым шагом необходимо создать middleware. Вы можете воспользоваться командой Artisan:

php artisan make:middleware RoleMiddleware

При выполнении этой команды будет создан файл RoleMiddleware.php в директории app/Http/Middleware. В этом файле вам нужно реализовать метод handle, который будет обрабатывать входящие запросы и вызывать соответствующий контроллер в зависимости от роли пользователя.

<?php

namespace AppHttpMiddleware;

use Closure;
use IlluminateSupportFacadesAuth;

class RoleMiddleware
{
    public function handle($request, Closure $next)
    {
        $user = Auth::user();

        if ($user->isAdmin()) {
            return app('AppHttpControllersAdminController')->callAction('index', $request->route()->parameters());
        }

        if ($user->isUser()) {
            return app('AppHttpControllersUserController')->callAction('index', $request->route()->parameters());
        }

        // Если пользователь не имеет определенной роли, то можно выполнить какую-то другую логику или вернуть ошибку 404

        return $next($request);
    }
}

В примере выше мы проверяем роль пользователя с помощью методов isAdmin() и isUser(). Если пользователь является администратором, то вызывается метод index контроллера AdminController. Если пользователь - обычный пользователь, вызывается метод index контроллера UserController. Это только пример, и вы можете адаптировать его под свои нужды.

Далее, вам нужно зарегистрировать middleware в файле app/Http/Kernel.php, в массиве $routeMiddleware:

protected $routeMiddleware = [
    // ...
    'role' => AppHttpMiddlewareRoleMiddleware::class,
];

Теперь можем использовать middleware в маршрутах routes/web.php:

Route::group(['middleware' => 'role'], function () {
    // Ваши маршруты здесь ...
});

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

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