diff --git a/src/Features/UserImpersonation.php b/src/Features/UserImpersonation.php index 91bb6789..861c1f05 100644 --- a/src/Features/UserImpersonation.php +++ b/src/Features/UserImpersonation.php @@ -11,6 +11,7 @@ use Stancl\Tenancy\Contracts\Feature; use Stancl\Tenancy\Contracts\Tenant; use Stancl\Tenancy\Database\Models\ImpersonationToken; use Stancl\Tenancy\Tenancy; +use Exception; class UserImpersonation implements Feature { @@ -84,6 +85,10 @@ class UserImpersonation implements Feature */ public static function stopImpersonating(bool $logout = true): void { + if (! static::isImpersonating()) { + throw new Exception('Not currently impersonating any user.'); + } + if ($logout) { $guard = session()->get('tenancy_impersonation_guard'); diff --git a/tests/TenantUserImpersonationTest.php b/tests/TenantUserImpersonationTest.php index e4ef9a80..dc421f73 100644 --- a/tests/TenantUserImpersonationTest.php +++ b/tests/TenantUserImpersonationTest.php @@ -234,6 +234,14 @@ test('stopImpersonating logs out the user from tenancy_impersonation_guard store expect(auth('web')->check())->toBeFalse(); expect(auth('test')->check())->toBeTrue(); + + expect(UserImpersonation::isImpersonating())->toBeFalse(); + + // tenancy_impersonation_guard isn't in the session anymore, + // stopImpersonating should throw an exception instead of logging out + expect(fn() => UserImpersonation::stopImpersonating())->toThrow(Exception::class); + + expect(auth()->check())->toBeTrue(); }); test('tokens have a limited ttl', function () {