2016-04-06 11 views
2

Laravel'de bir SaaS uygulaması yapıyorum ve her bir kişiye/şirkete kendi alt alanlarına vermek istiyorum. company_id sütunlu bir users tablom var. Bu şirket için alt etki alanı olacak bir sub_domain sütun içeren bir companies tablom var. Şirket A'nın Şirket B'nin alt alanını ziyaret etmesini istemiyorum.Laravel'de çok kiracı alt etki alanları 5

Bunun için nasıl kullanacağım konusunda birkaç makale ve birçok foruma baktım ve işe yarayan herhangi bir çözüm bulamıyorum. Middleware'i rota gruplaması ile birlikte kullanmam gerektiğini düşünüyorum, ama bunu anlayamıyorum. Bu konuda tecrübesi olan var mı?

İşte benim routes.php geçerli: bununla

Route::group(['domain' => '{sub_domain}.' . env('APP_DOMAIN_NAME'), 'middleware' => 'subdomain'], function() { 

    Route::auth(); 

    Route::group(['middleware' => 'guest'], function() { 
     //Route::get('/', '[email protected]'); 
     Route::get('/tickets/create', '[email protected]'); 
     Route::post('/tickets/create', '[email protected]'); 
    }); 

    Route::group(['middleware' => 'auth'], function() { 
     Route::get('/tickets', '[email protected]'); 
     Route::get('/tickets/{id}', '[email protected]'); 
     Route::patch('/tickets/{id}', '[email protected]'); 
     Route::delete('/tickets/{id}', '[email protected]'); 
     Route::get('/my-tickets', '[email protected]'); 
     Route::get('/tickets/close/{id}', '[email protected]'); 

    }); 
}); 

Sorun başarılı bir şekilde başka alt alanı ziyaret edebilir olmasıdır. Şimdi, sadece şu anda oturum açmış olan kullanıcının şirketi ile ilişkili olan biletleri görebiliyorum. 403'ü atmak, hatta kendi alt alanlarına yeniden yönlendirmek istiyorum. Bu katman çalışması gerektiğini

public function handle($request, Closure $next) 
{ 
    $request_uri = $request->server('HTTP_HOST'); 
    $this->checkSubdomainExists($request_uri); 

    if(Auth::check()) { 
     $user = User::find(Auth::user()->id); 
     if($user->company->sub_domain !== Session::get('company_sub_domain')) { 
      Session::forget('company_sub_domain'); 
      return 'not Authed'; 
     } 
    } 

    return $next($request); 
} 

cevap

3

: Burada

Subdomain.php ara yazılımdır.

public function handle($request, Closure $next) 
{ 
    if(Auth::check()) { 
     $user = Auth::user(); 
     $sub_domain = array_shift((explode(".",$_SERVER['HTTP_HOST']))); 
     if($user->company->sub_domain != $sub_domain) return abort(403); 

    } 

    return $next($request); 
} 

Ancak, eğer şirket giriş yapmamışsa dikkat edin, etki alanını görebilirsiniz.

+0

Dostum !!! Teşekkür ederim! Şimdi, tek yapmam gereken geçerli bir alt alan ve kimliği doğrulanmamış kullanıcılar için bir kontrol eklemektir. – dericcain

0

Laravel'deki oturumlar bir alana özgü olabilir, bu nedenle bu özelliği geçerli alt etki alanı ile kullanabilirsiniz. oturumu yapılandırma dosyasında

:

'domain' => (!empty($_SERVER['HTTP_HOST'])) ? $_SERVER['HTTP_HOST'] : null,