session()->has('errors')) { $errors = $request->session()->get('errors')->getBag('default')->getMessages(); } $inertiaProvider = new InertiaProvider('UserManagement/Login', ['errors' => $errors, 'appName' => app('tenant')->name]); return $inertiaProvider->render(); } public function doLogin(Request $request) { $credentials = $request->validate([ 'username' => ['required', 'string'], 'password' => ['required'], ], [ 'username.required' => 'Bitte gib deinen Anmeldenamen ein.', 'username.string' => 'Der Anmeldename muss eine E-Mail-Adresse sein.', 'password.required' => 'Bitte gib dein Passwort ein.', ]); $user = $this->users->findByUsername($request->input('username')); if ($user !== null && $user->password === null) { return redirect()->intended('/register/verifyEmail'); } if (!Auth::attempt($credentials)) { return back()->withErrors([ 'username' => 'Diese Zugangsdaten sind ungültig.', ]); } $user = Auth::user(); $tenant = app('tenant'); // Auf "lv" darf sich grundsätzlich jeder aktive Nutzer einloggen. // Auf Sub-Tenants gilt: // - Der Nutzer muss dem Tenant zugeordnet sein (local_group) // - ODER er hat "Bundesrecht über Landesrecht": // user_role_main === ROLE_ADMINISTRATOR -> Login auf jedem Sub-Tenant erlaubt. $isMainAdmin = $user->user_role_main === UserRole::USER_ROLE_ADMIN; $isMemberOfTenant = $tenant->slug === $user->local_group; if ($tenant->slug !== 'lv' && !$isMainAdmin && !$isMemberOfTenant) { Auth::logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return back()->withErrors([ 'username' => 'Diese Zugangsdaten sind für diesen Stamm nicht gültig.', ]); } if (!$user->active) { Auth::logout(); $request->session()->invalidate(); $request->session()->regenerateToken(); return back()->withErrors([ 'username' => 'Dieses Benutzerkonto ist nicht aktiv.', ]); } $request->session()->regenerate(); return redirect()->intended('/'); } }