ldc-portsalaries/app/Http/Middleware/UserSite.php

59 lines
1.8 KiB
PHP
Raw Normal View History

2021-05-08 06:50:19 +02:00
<?php
namespace App\Http\Middleware;
use App\Models\Site;
use Closure;
use Illuminate\Database\Eloquent\ModelNotFoundException;
2021-07-08 14:26:08 +02:00
use App\Enums\Role;
2022-06-17 12:41:38 +02:00
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Session;
2021-05-08 06:50:19 +02:00
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 {
2022-06-17 12:41:38 +02:00
if (!Site::whereId($user->selected_site_id)->exists()) {
$user->selected_site_id = null;
$user->save();
2021-05-08 06:50:19 +02:00
}
2022-06-17 12:41:38 +02:00
if ($request->query('userSite')) {
2022-06-17 12:41:38 +02:00
/** @var \App\Models\Site|null */
$site = $user->role->equals(Role::admin()) ?
2022-06-17 12:41:38 +02:00
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()) ?
2022-06-17 12:41:38 +02:00
Site::firstOrFail() : $user->sites()->firstOrFail();
$user->selected_site_id = $site->id;
$user->saveOrFail();
}
} catch (ModelNotFoundException $e) {
2022-06-17 12:41:38 +02:00
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');
2021-05-08 06:50:19 +02:00
}
return $next($request);
}
}