From 2860fa81ac9ee6fdef46579b8157c87f2f0df608 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Munsch?= Date: Fri, 17 Jun 2022 12:41:38 +0200 Subject: [PATCH] Fix UserSite handling --- app/Http/Middleware/UserSite.php | 38 +++++++++++++++++++------------- app/Models/Site.php | 10 +++++++++ 2 files changed, 33 insertions(+), 15 deletions(-) diff --git a/app/Http/Middleware/UserSite.php b/app/Http/Middleware/UserSite.php index a07ff9d..554fbe5 100644 --- a/app/Http/Middleware/UserSite.php +++ b/app/Http/Middleware/UserSite.php @@ -6,6 +6,8 @@ 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 { @@ -21,29 +23,35 @@ class UserSite /** @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(); } - 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'); + 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); } diff --git a/app/Models/Site.php b/app/Models/Site.php index 8662950..cbb1322 100644 --- a/app/Models/Site.php +++ b/app/Models/Site.php @@ -179,6 +179,16 @@ class Site extends Model parent::__construct($attributes); } + protected static function booted() + { + static::deleted(function (self $model) { + User::whereSelectedSiteId($model->id)->get() + ->map(function (User $user) { + $user->selected_site_id = null; + }); + }); + } + /** * Has one Societe *