Files
onboard/app/Http/Controllers/AuthController.php
2026-03-25 17:37:32 +09:00

111 lines
2.8 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\Redis;
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');
}
}