ldc-portsalaries/app/Http/Middleware/UserSite.php
2022-06-17 12:44:51 +02:00

58 lines
1.8 KiB
PHP

<?php
namespace App\Http\Middleware;
use App\Models\Site;
use Closure;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use App\Enums\Role;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Session;
class UserSite
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
/** @var \App\Models\User */
$user = auth()->user();
try {
if (!Site::whereId($user->selected_site_id)->exists()) {
$user->selected_site_id = null;
$user->save();
}
if ($request->query('userSite')) {
/** @var \App\Models\Site|null */
$site = $user->role->equals(Role::admin()) ?
Site::whereId($request->query('userSite'))->first() :
$user->sites()->where('site_id', $request->query('userSite'))->first();
if ($site) {
$user->selected_site_id = $site->id;
$user->saveOrFail();
}
}
// Select user site
if (!$user->selected_site_id) {
/** @var \App\Models\Site */
$site = $user->role->equals(Role::admin()) ?
Site::firstOrFail() : $user->sites()->firstOrFail();
$user->selected_site_id = $site->id;
$user->saveOrFail();
}
} catch (ModelNotFoundException $e) {
Log::warning("$user->name n'as pas de site administrable.");
auth()->logout();
Session::flash('error', "$user->name n'as pas de site administrable.");
return \response()->redirectToRoute('bo.login');
}
return $next($request);
}
}