Skip to content

Commit 6c44a2e

Browse files
committed
Fix resolving users in the queue
Signed-off-by: Kevin Ullyott <[email protected]>
1 parent ae289b7 commit 6c44a2e

File tree

7 files changed

+31
-6
lines changed

7 files changed

+31
-6
lines changed

src/Auditable.php

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@ trait Auditable
5656
*/
5757
public $isCustomEvent = false;
5858

59+
/**
60+
* @var array Preloaded data to be used by resolvers
61+
*/
62+
public $preloadedResolverData = [];
63+
5964
/**
6065
* Auditable boot logic.
6166
*
@@ -372,7 +377,7 @@ protected function resolveUser()
372377
}
373378

374379
if (is_subclass_of($userResolver, \OwenIt\Auditing\Contracts\UserResolver::class)) {
375-
return call_user_func([$userResolver, 'resolve']);
380+
return call_user_func([$userResolver, 'resolve'], $this);
376381
}
377382

378383
throw new AuditingException('Invalid UserResolver implementation');
@@ -403,6 +408,17 @@ protected function runResolvers(): array
403408
return $resolved;
404409
}
405410

411+
public function preloadResolverData()
412+
{
413+
$this->preloadedResolverData = $this->runResolvers();
414+
415+
if (!empty ($this->resolveUser())) {
416+
$this->preloadedResolverData['user'] = $this->resolveUser();
417+
}
418+
419+
return $this;
420+
}
421+
406422
/**
407423
* Determine if an attribute is eligible for auditing.
408424
*

src/AuditableObserver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ protected function dispatchAudit(Auditable $model)
104104
}
105105

106106
// Unload the relations to prevent large amounts of unnecessary data from being serialized.
107-
DispatchAudit::dispatch($model->withoutRelations());
107+
DispatchAudit::dispatch($model->preloadResolverData()->withoutRelations());
108108
}
109109

110110
/**

src/Contracts/UserResolver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@ interface UserResolver
99
*
1010
* @return \Illuminate\Contracts\Auth\Authenticatable|null
1111
*/
12-
public static function resolve();
12+
public static function resolve(Auditable $auditable);
1313
}

src/Resolvers/IpAddressResolver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ class IpAddressResolver implements Resolver
1010
{
1111
public static function resolve(Auditable $auditable): string
1212
{
13-
return Request::ip();
13+
return $auditable->preloadedResolverData['ip_address'] ?? Request::ip();
1414
}
1515
}

src/Resolvers/UrlResolver.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ class UrlResolver implements \OwenIt\Auditing\Contracts\Resolver
1313
*/
1414
public static function resolve(Auditable $auditable): string
1515
{
16+
if (! empty($auditable->preloadedResolverData['url'])) {
17+
return $auditable->preloadedResolverData['url'];
18+
}
19+
1620
if (App::runningInConsole()) {
1721
return 'console';
1822
}

src/Resolvers/UserAgentResolver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ class UserAgentResolver implements Resolver
1010
{
1111
public static function resolve(Auditable $auditable)
1212
{
13-
return Request::header('User-Agent');
13+
return $auditable->preloadedResolverData['user_agent'] ?? Request::header('User-Agent');
1414
}
1515
}

src/Resolvers/UserResolver.php

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,19 @@
44

55
use Illuminate\Support\Facades\Auth;
66
use Illuminate\Support\Facades\Config;
7+
use OwenIt\Auditing\Contracts\Auditable;
78

89
class UserResolver implements \OwenIt\Auditing\Contracts\UserResolver
910
{
1011
/**
1112
* @return \Illuminate\Contracts\Auth\Authenticatable|null
1213
*/
13-
public static function resolve()
14+
public static function resolve(Auditable $auditable)
1415
{
16+
if (! empty($auditable->preloadedResolverData['user'])) {
17+
return $auditable->preloadedResolverData['user'];
18+
}
19+
1520
$guards = Config::get('audit.user.guards', [
1621
\config('auth.defaults.guard')
1722
]);

0 commit comments

Comments
 (0)