Guest User

Laravel Multi-Tenant Multi-Database Multi-Domain

a guest
Nov 11th, 2018
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.85 KB | None | 0 0
  1. <?php
  2.  
  3. //RouteServiceProvider
  4. protected function mapTenantRoutes()
  5.     {
  6.         Route::middleware(['tenant.domain','web'])
  7.             ->namespace($this->namespace)
  8.             ->group(base_path('routes/tenant.php'));
  9.     }
  10.  
  11. //App/Htt/Kernel
  12. protected $middleware = [
  13.         \App\Http\Middleware\CheckForMaintenanceMode::class,
  14.         \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
  15.         \App\Http\Middleware\TrimStrings::class,
  16.         \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
  17.         \App\Http\Middleware\TrustProxies::class,
  18.         //Tenant
  19.         \App\Http\Middleware\Tenant\TenantMiddleware::class,
  20.         \App\Http\Middleware\Tenant\TenantFilesystems::class,
  21.     ];
  22.  
  23. protected $routeMiddleware = [
  24.         'auth' => \App\Http\Middleware\Authenticate::class,
  25.         'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
  26.         'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
  27.         'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
  28.         'can' => \Illuminate\Auth\Middleware\Authorize::class,
  29.         'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
  30.         'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
  31.         'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
  32.         'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
  33.         //Tenant
  34.         'tenant.domain' => \App\Http\Middleware\Tenant\CheckMainDomain::class,
  35.         'tenant.not.domain' => \App\Http\Middleware\Tenant\NotMainDomain::class,
  36.     ];
  37.  
  38. //Http/Middleware/Tenant/TenantMiddleware
  39. public function handle($request, Closure $next)
  40.     {
  41.         $manager = app(ManagerTenant::class);
  42.         if ($manager->domainIsMain())
  43.         {
  44.             return $next($request);
  45.         }
  46.  
  47.         $company = $this->getCompany($request->getHost());
  48.        
  49.         if (!$company && $request->url() != route('404.tenant')) {
  50.             return redirect()->route('404.tenant');
  51.         } else if($request->url() != route('404.tenant') && !$manager->domainIsMain() ) {
  52.             $manager->setConnection($company);
  53.  
  54.             $this->setSessionCompany($company->only([
  55.                 'name', 'uuid',
  56.             ]));
  57.         }
  58.  
  59.         return $next($request);
  60.     }
  61.  
  62.  
  63.     public function getCompany($host)
  64.     {
  65.         return Company::where('domain', $host)->first();
  66.     }
  67.  
  68.     public function setSessionCompany($company)
  69.     {
  70.         session()->put('company', $company);
  71.     }
  72.  
  73. //App\Http\Middleware\Tenant\CheckMainDomain
  74. public function handle($request, Closure $next)
  75.     {
  76.         if ($request->getHost() != env('MAIN_DOMAIN')) {
  77.             //dd(env('MAIN_DOMAIN'));
  78.             return abort(401, 'Unauthorized access!');
  79.         }
  80.  
  81.         return $next($request);
  82.     }
  83. //App\Http\Middleware\Tenant\NotMainDomain
  84. public function handle($request, Closure $next)
  85.     {
  86.         if ($request->getHost() === env('MAIN_DOMAIN')) {
  87.             return abort(401, 'Unauthorized access!');
  88.         }
  89.  
  90.         return $next($request);
  91.     }
  92.  
  93. //Routes/tenant.php
  94. Route::group(['namespace'=>'Tenant'], function(){
  95.     Route::get('/', 'TenantController@index')->name('tenant');
  96.     Route::get('companies', 'CompanyController@index')->name('company.index');
  97.     Route::get('company/create', 'CompanyController@create')->name('company.create');
  98.     Route::post('company', 'CompanyController@store')->name('company.store');
  99.     Route::get('company/{domain}', 'CompanyController@show')->name('company.show');
  100.     Route::get('company/edit/{domain}', 'CompanyController@edit')->name('company.edit');
  101.     Route::put('company/{id}', 'CompanyController@update')->name('company.update');
  102.     Route::delete('company/{id}', 'CompanyController@destroy')->name('company.destroy');
  103. });
  104.  
  105.  
  106. ?>
Advertisement
Add Comment
Please, Sign In to add comment