В миддлваре пишите код, который определяет какой контроллер должен обрабатывать реквест, примерно так:
$user = Auth::user();
if ($user?->isAdmin()) {
$controller = \Controllers\Admin\IndexController::class;
} elseif ($user?->isManager()) {
$controller = \Controllers\Manager\IndexController::class;
} else {
abort(403);
}
Дальше - подменяете параметры роута:
$route = $request->route();
$action = $route->getAction();
// подменяем на новый
$action['uses'] = "$controller@$actionMethod";
$action['controller'] = "$controller@$actionMethod";
// сохраняем
$route->setAction($action);
// нужно сбросить контроллер, иначе отрабатывает старый
$route->controller = false;
return $next($request);