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

50 lines
1.7 KiB
PHP

<?php
namespace App\Http\Middleware;
use App\Models\Site;
use Closure;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use App\Enums\Role;
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 {
// Select user site
if (!$user->selected_site_id) {
$site = $user->role->equals(Role::admin()) ?
Site::firstOrFail() : $user->sites()->firstOrFail();
$user->selected_site_id = $site->id;
$user->saveOrFail();
}
if ($request->query('userSite')) {
$site = $user->role->equals(Role::admin()) ?
Site::whereId($request->query('userSite'))->firstOrFail() :
$user->sites()->where('site_id', $request->query('userSite'))->firstOrFail();
$user->selected_site_id = $site->id;
$user->saveOrFail();
} elseif (!Site::where('id', $user->selected_site_id)->exists()) {
$site = $user->role->equals(Role::admin()) ?
Site::whereId($request->query('userSite'))->firstOrFail() :
$user->sites()->where('site_id', $request->query('userSite'))
->firstOrFail();
$user->selected_site_id = $site->id;
$user->saveOrFail();
}
} catch (ModelNotFoundException $e) {
abort(400, 'Vous n\'avez pas de site administrable');
}
return $next($request);
}
}