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