Add cache policy for ServerPolicy
10 second cache, just long enough to handle the page load without making more than one MySQL call.
This commit is contained in:
parent
f91e4c511e
commit
efdc3e6fd8
2 changed files with 13 additions and 1 deletions
|
@ -7,6 +7,9 @@ This project follows [Semantic Versioning](http://semver.org) guidelines.
|
|||
### Fixed
|
||||
* `[pre.3]` — Fixes bug in cache handler that doesn't cache against the user making the request. Would have allowed for users to access servers not belonging to themselves in production.
|
||||
|
||||
### Added
|
||||
* New cache policy for ServerPolicy to avoid making 15+ queries per page load when confirming if a user has permission to perform an action.
|
||||
|
||||
## v0.6.0-pre.3 (Courageous Carniadactylus)
|
||||
### Fixed
|
||||
* `[pre.2]` — Fixes bug where servers could not be manually deployed to nodes due to a broken SQL call.
|
||||
|
|
|
@ -24,11 +24,14 @@
|
|||
|
||||
namespace Pterodactyl\Policies;
|
||||
|
||||
use Cache;
|
||||
use Carbon;
|
||||
use Pterodactyl\Models\User;
|
||||
use Pterodactyl\Models\Server;
|
||||
|
||||
class ServerPolicy
|
||||
{
|
||||
|
||||
/**
|
||||
* Create a new policy instance.
|
||||
*
|
||||
|
@ -53,7 +56,13 @@ class ServerPolicy
|
|||
return true;
|
||||
}
|
||||
|
||||
return $user->permissions()->server($server)->permission($permission)->exists();
|
||||
$permissions = Cache::remember('ServerPolicy.' . $user->uuid . $server->uuid, Carbon::now()->addSeconds(10), function () use ($user, $server) {
|
||||
return $user->permissions()->server($server)->get()->transform(function ($item) {
|
||||
return $item->permission;
|
||||
})->values();
|
||||
});
|
||||
|
||||
return ($permissions->search($permission, true) !== false);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in a new issue