11<?php
2- /**
3- * Pterodactyl - Panel
4- * Copyright (c) 2015 - 2017 Dane Everitt <dane@daneeveritt.com>.
5- *
6- * This software is licensed under the terms of the MIT license.
7- * https://opensource.org/licenses/MIT
8- */
92
103namespace Pterodactyl \Policies ;
114
12- use Cache ;
13- use Carbon ;
5+ use Carbon \Carbon ;
146use Pterodactyl \Models \User ;
157use Pterodactyl \Models \Server ;
8+ use Illuminate \Contracts \Cache \Repository as CacheRepository ;
169
1710class ServerPolicy
1811{
12+ /**
13+ * @var \Illuminate\Contracts\Cache\Repository
14+ */
15+ private $ cache ;
16+
17+ /**
18+ * ServerPolicy constructor.
19+ *
20+ * @param \Illuminate\Contracts\Cache\Repository $cache
21+ */
22+ public function __construct (CacheRepository $ cache )
23+ {
24+ $ this ->cache = $ cache ;
25+ }
26+
1927 /**
2028 * Checks if the user has the given permission on/for the server.
2129 *
@@ -26,13 +34,16 @@ class ServerPolicy
2634 */
2735 protected function checkPermission (User $ user , Server $ server , $ permission )
2836 {
29- $ permissions = Cache::remember ('ServerPolicy. ' . $ user ->uuid . $ server ->uuid , Carbon::now ()->addSeconds (5 ), function () use ($ user , $ server ) {
30- return $ user ->permissions ()->server ($ server )->get ()->transform (function ($ item ) {
31- return $ item ->permission ;
32- })->values ();
37+ $ key = sprintf ('ServerPolicy.%s.%s ' , $ user ->uuid , $ server ->uuid );
38+
39+ $ permissions = $ this ->cache ->remember ($ key , Carbon::now ()->addSeconds (5 ), function () use ($ user , $ server ) {
40+ /** @var \Pterodactyl\Models\Subuser|null $subuser */
41+ $ subuser = $ server ->subusers ()->where ('user_id ' , $ user ->id )->first ();
42+
43+ return $ subuser ? $ subuser ->permissions : [];
3344 });
3445
35- return $ permissions -> search ($ permission , true ) !== false ;
46+ return in_array ($ permission , $ permissions ) ;
3647 }
3748
3849 /**
0 commit comments