84 lines
2.7 KiB
PHP
84 lines
2.7 KiB
PHP
<?php
|
|
|
|
namespace App\Domains\UserManagement\Controllers;
|
|
|
|
use App\Enumerations\UserRole;
|
|
use App\Providers\InertiaProvider;
|
|
use App\Scopes\CommonController;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
class LoginController extends CommonController {
|
|
public function loginForm(Request $request) {
|
|
$errors = [];
|
|
|
|
if ($request->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('/');
|
|
}
|
|
}
|