feature(impersonate as user): Admin can impersonate as others users

This commit is contained in:
kusowl 2026-01-27 18:54:08 +05:30
parent 690a50408d
commit a4f644ad20
2 changed files with 38 additions and 0 deletions

View File

@ -0,0 +1,30 @@
<?php
namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use App\Models\User;
use Auth;
class ImpersonatedUserController extends Controller
{
public function store(User $user)
{
Session()->put('impersonate', Auth::id());
Auth::login($user);
return to_route('explore');
}
public function destroy()
{
$adminId = Session()->get('impersonate');
Auth::loginUsingId($adminId);
Session()->forget('impersonate');
return to_route('admin.dashboard');
}
}

View File

@ -1,7 +1,10 @@
<?php <?php
use App\Enums\UserTypes;
use App\Http\Controllers\Auth\AuthenticatedUserController; use App\Http\Controllers\Auth\AuthenticatedUserController;
use App\Http\Controllers\Auth\ImpersonatedUserController;
use App\Http\Controllers\Auth\RegisteredUserController; use App\Http\Controllers\Auth\RegisteredUserController;
use App\Http\Middleware\HasRole;
Route::middleware('guest')->group(function () { Route::middleware('guest')->group(function () {
Route::resource('/login', AuthenticatedUserController::class) Route::resource('/login', AuthenticatedUserController::class)
@ -13,3 +16,8 @@
Route::delete('/logout', [AuthenticatedUserController::class, 'destroy']) Route::delete('/logout', [AuthenticatedUserController::class, 'destroy'])
->middleware('auth') ->middleware('auth')
->name('logout'); ->name('logout');
Route::middleware([HasRole::class.':'.UserTypes::Admin->value, 'auth'])->group(function () {
Route::get('/impersonate/{user}', [ImpersonatedUserController::class, 'store'])->name('impersonate');
Route::delete('/impersonate', [ImpersonatedUserController::class, 'destroy'])->name('impersonate.destroy');
});