1
0
Fork 0
mirror of https://github.com/archtechx/tenancy.git synced 2026-03-22 03:34:04 +00:00

Instead of setting the 'tenancy_impersonating' session variable, store auth guard in 'tenancy_impersonation_guard'

Also make `stopImpersonating()` able to keep the user logged in.
This commit is contained in:
lukinovec 2026-03-03 12:27:30 +01:00
parent c4960b76cb
commit e4f3cedcd5
2 changed files with 14 additions and 10 deletions

View file

@ -61,9 +61,9 @@ class UserImpersonation implements Feature
Auth::guard($token->auth_guard)->loginUsingId($token->user_id, $token->remember); Auth::guard($token->auth_guard)->loginUsingId($token->user_id, $token->remember);
$token->delete(); session()->put('tenancy_impersonation_guard', $token->auth_guard);
session()->put('tenancy_impersonating', true); $token->delete();
return redirect($token->redirect_url); return redirect($token->redirect_url);
} }
@ -76,16 +76,20 @@ class UserImpersonation implements Feature
public static function isImpersonating(): bool public static function isImpersonating(): bool
{ {
return session()->has('tenancy_impersonating'); return session()->has('tenancy_impersonation_guard');
} }
/** /**
* Logout from the current domain and forget impersonation session. * Logout from the current domain and forget impersonation session.
*/ */
public static function stopImpersonating(): void public static function stopImpersonating(bool $logout = true): void
{ {
auth()->logout(); if ($logout) {
$guard = session()->get('tenancy_impersonation_guard');
session()->forget('tenancy_impersonating'); auth($guard)->logout();
}
session()->forget('tenancy_impersonation_guard');
} }
} }

View file

@ -89,13 +89,13 @@ test('tenant user can be impersonated on a tenant domain', function () {
->assertSee('You are logged in as Joe'); ->assertSee('You are logged in as Joe');
expect(UserImpersonation::isImpersonating())->toBeTrue(); expect(UserImpersonation::isImpersonating())->toBeTrue();
expect(session('tenancy_impersonating'))->toBeTrue(); expect(session('tenancy_impersonation_guard'))->toBe($token->auth_guard);
// Leave impersonation // Leave impersonation
UserImpersonation::stopImpersonating(); UserImpersonation::stopImpersonating();
expect(UserImpersonation::isImpersonating())->toBeFalse(); expect(UserImpersonation::isImpersonating())->toBeFalse();
expect(session('tenancy_impersonating'))->toBeNull(); expect(session('tenancy_impersonation_guard'))->toBeNull();
// Assert can't access the tenant dashboard // Assert can't access the tenant dashboard
pest()->get('http://foo.localhost/dashboard') pest()->get('http://foo.localhost/dashboard')
@ -135,13 +135,13 @@ test('tenant user can be impersonated on a tenant path', function () {
->assertSee('You are logged in as Joe'); ->assertSee('You are logged in as Joe');
expect(UserImpersonation::isImpersonating())->toBeTrue(); expect(UserImpersonation::isImpersonating())->toBeTrue();
expect(session('tenancy_impersonating'))->toBeTrue(); expect(session('tenancy_impersonation_guard'))->toBe($token->auth_guard);
// Leave impersonation // Leave impersonation
UserImpersonation::stopImpersonating(); UserImpersonation::stopImpersonating();
expect(UserImpersonation::isImpersonating())->toBeFalse(); expect(UserImpersonation::isImpersonating())->toBeFalse();
expect(session('tenancy_impersonating'))->toBeNull(); expect(session('tenancy_impersonation_guard'))->toBeNull();
// Assert can't access the tenant dashboard // Assert can't access the tenant dashboard
pest()->get('/acme/dashboard') pest()->get('/acme/dashboard')