From ab04ef025b866b2e236867affb24ba38d662b51e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20=C5=A0tancl?= Date: Wed, 30 Oct 2019 15:50:00 +0100 Subject: [PATCH] [2.2.0] Universal routes (#210) * Universal routes * Fix bugs * Add universal MW group --- src/Middleware/PreventAccessFromTenantDomains.php | 15 ++++++++++----- src/TenancyServiceProvider.php | 2 ++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/Middleware/PreventAccessFromTenantDomains.php b/src/Middleware/PreventAccessFromTenantDomains.php index fb797d4c..92fda549 100644 --- a/src/Middleware/PreventAccessFromTenantDomains.php +++ b/src/Middleware/PreventAccessFromTenantDomains.php @@ -22,12 +22,17 @@ class PreventAccessFromTenantDomains */ public function handle($request, Closure $next) { + // If the route is universal, always let the request pass. + if ($this->routeHasMiddleware($request->route(), 'universal')) { + return $next($request); + } + // If the domain is not in exempt domains, it's a tenant domain. // Tenant domains can't have routes without tenancy middleware. $isExemptDomain = in_array($request->getHost(), config('tenancy.exempt_domains')); $isTenantDomain = ! $isExemptDomain; - $isTenantRoute = $this->isTenantRoute($request->route()); + $isTenantRoute = $this->routeHasMiddleware($request->route(), 'tenancy'); if ($isTenantDomain && ! $isTenantRoute) { // accessing web routes from tenant domains return redirect(config('tenancy.home_url')); @@ -40,17 +45,17 @@ class PreventAccessFromTenantDomains return $next($request); } - public function isTenantRoute(Route $route): bool + public function routeHasMiddleware(Route $route, $middleware): bool { - if (in_array('tenancy', $route->middleware(), true)) { + if (in_array($middleware, $route->middleware(), true)) { return true; } // Loop one level deep and check if the route's middleware // groups have a `tenancy` middleware group inside them $middlewareGroups = Router::getMiddlewareGroups(); - foreach ($route->gatherMiddleware() as $middleware) { - if (isset($middlewareGroups[$middleware]) && in_array('tenancy', $middlewareGroups[$middleware], true)) { + foreach ($route->gatherMiddleware() as $inner) { + if (isset($middlewareGroups[$inner]) && in_array($middleware, $middlewareGroups[$inner], true)) { return true; } } diff --git a/src/TenancyServiceProvider.php b/src/TenancyServiceProvider.php index 350bfcd3..e7c3e940 100644 --- a/src/TenancyServiceProvider.php +++ b/src/TenancyServiceProvider.php @@ -92,6 +92,8 @@ class TenancyServiceProvider extends ServiceProvider Middleware\PreventAccessFromTenantDomains::class, ]); + Route::middlewareGroup('universal', []); + $this->loadRoutesFrom(__DIR__ . '/routes.php'); $this->app->singleton('globalUrl', function ($app) {