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 *