Skip to content

Commit b59ad10

Browse files
committed
Fix impersonated method
1 parent 6d4f520 commit b59ad10

File tree

2 files changed

+30
-13
lines changed

2 files changed

+30
-13
lines changed

src/Guards/ImpersonatableSessionGuard.php

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,9 @@ class ImpersonatableSessionGuard extends BaseSessionGuard implements Impersonata
1717
{
1818
protected ?AuthenticatableContract $originalUser = null;
1919

20-
protected bool $impersonated = false;
21-
2220
public function impersonate(AuthenticatableContract $user): void
2321
{
24-
$originalUser = $this->impersonated ? $this->originalUser() : $this->user();
22+
$originalUser = $this->impersonated() ? $this->originalUser() : $this->user();
2523

2624
$this->updateImpersonateSession($originalUser?->getAuthIdentifier());
2725

@@ -34,7 +32,7 @@ public function impersonate(AuthenticatableContract $user): void
3432

3533
public function onceImpersonate(AuthenticatableContract $user): void
3634
{
37-
$originalUser = $this->impersonated ? $this->originalUser() : $this->user();
35+
$originalUser = $this->impersonated() ? $this->originalUser() : $this->user();
3836

3937
$this->setOriginalUser($originalUser);
4038

@@ -57,8 +55,6 @@ public function exitImpersonation(): void
5755
$this->fireExitImpersonationEvent(user: $impersonatedUser, originalUser: $originalUser);
5856

5957
$this->originalUser = null;
60-
61-
$this->impersonated = false;
6258
}
6359

6460
protected function updateImpersonateSession(mixed $id): void
@@ -72,8 +68,6 @@ public function setOriginalUser(?AuthenticatableContract $originalUser): static
7268
{
7369
$this->originalUser = $originalUser;
7470

75-
$this->impersonated = true;
76-
7771
if ($this->originalUser) {
7872
$this->fireImpersonatedEvent(originalUser: $this->originalUser);
7973
}
@@ -83,14 +77,14 @@ public function setOriginalUser(?AuthenticatableContract $originalUser): static
8377

8478
public function originalUser(): ?AuthenticatableContract
8579
{
86-
if (! $this->impersonated) {
87-
return null;
88-
}
89-
9080
if (! is_null($this->originalUser)) {
9181
return $this->originalUser;
9282
}
9383

84+
if (! $this->impersonated()) {
85+
return null;
86+
}
87+
9488
$id = $this->session->get($this->getOriginalUserName());
9589

9690
if (! is_null($id) && $this->originalUser = $this->getProvider()->retrieveById($id)) {
@@ -102,7 +96,7 @@ public function originalUser(): ?AuthenticatableContract
10296

10397
public function impersonated(): bool
10498
{
105-
return $this->impersonated;
99+
return $this->session->exists($this->getOriginalUserName());
106100
}
107101

108102
/**

tests/Guards/ImpersonatableSessionGuardTest.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,29 @@ public function it_exit_impersonation_with_original_user(): void
171171
Event::assertDispatched(fn (ExitImpersonation $e) => $e->guard === $guard && $user->is($e->user) && $originalUser->is($e->originalUser));
172172
}
173173

174+
#[Test]
175+
public function it_can_set_set_original_user(): void
176+
{
177+
$guard = 'testbentch';
178+
179+
$impersonatableGuard = Auth::guard($guard);
180+
181+
$this->assertInstanceOf(ImpersonatableSessionGuard::class, $impersonatableGuard);
182+
183+
/** @var User $user */
184+
$user = User::query()->forceCreate([
185+
'name' => 'user',
186+
'email' => 'user@localhost',
187+
'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
188+
]);
189+
190+
$this->assertNull($impersonatableGuard->originalUser());
191+
192+
$impersonatableGuard->setOriginalUser($user);
193+
194+
$this->assertTrue($user->is($impersonatableGuard->originalUser()));
195+
}
196+
174197
#[Test]
175198
public function it_inherits_base_guard_session(): void
176199
{

0 commit comments

Comments
 (0)