Files
onboard/app/Http/Controllers/AuthController.php
2026-04-24 16:46:10 +09:00

112 lines
2.9 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Str;
use Inertia\Inertia;
class AuthController extends Controller
{
public function login(Request $request)
{
$validator = Validator::make($request->all(), [
'login' => 'required',
'password' => 'required',
]);
$login = Str::lower($request->login);
$password = $request->password;
if ($validator->fails()) {
return back()->withErrors([
$validator->errors(),
]);
}
$credentials = [
'login' => $login,
'password' => $password,
];
if (! Auth::attempt($credentials)) {
return back()->withErrors([
'Неверный логин или пароль',
]);
}
$user = User::where('login', $login)->first();
if (! $user->is_active) {
Auth::logout();
return back()->withErrors([
'Учетная запись отключена',
]);
}
$request->session()->regenerate();
$tokenName = $request->session()->getId();
$token = $user->createToken($tokenName, ['*'], now()->addYears(5))->plainTextToken;
$request->session()->put('token', $token);
return Inertia::location(route('start'));
}
public function changeRole(Request $request)
{
$user = Auth::user();
if (! $user) {
return null;
}
$data = $request->validate([
'role_id' => 'required|integer|exists:roles,role_id',
]);
$sessionId = session()->getId();
$token = $user->tokens()->where('name', $sessionId)->first();
if ($token) {
$token->abilities = ['role:'.$request->role_id];
$token->save();
}
DB::table('sessions')
->where('id', $sessionId)
->update(['role_id' => $request->role_id]);
// $sessionKey = 'user_' . $user->id . '_current_role';
//
// $user->current_role_id = $data['role_id'];
// $user->save();
return redirect()->route('start')->setStatusCode(302);
}
public function logout(Request $request)
{
$user = Auth::user();
if ($user) {
$tokenName = $request->session()->getId();
// Удаляем все токены пользователя
$user->tokens()->where('name', $tokenName)->delete();
// Очищаем сессию
$request->session()->invalidate();
$request->session()->regenerateToken();
}
return redirect()->route('login');
}
}