From 57cf636816777de3994cc27305ceb8048d439b69 Mon Sep 17 00:00:00 2001 From: Dane Everitt Date: Mon, 18 Jan 2016 00:56:09 -0500 Subject: [PATCH] Update server policy definitions --- app/Policies/ServerPolicy.php | 136 +++++++++++++++++++- resources/views/layouts/master.blade.php | 2 +- resources/views/server/index.blade.php | 157 +++++++++++------------ 3 files changed, 209 insertions(+), 86 deletions(-) diff --git a/app/Policies/ServerPolicy.php b/app/Policies/ServerPolicy.php index 92ced414e..6e49d88e7 100644 --- a/app/Policies/ServerPolicy.php +++ b/app/Policies/ServerPolicy.php @@ -60,6 +60,70 @@ class ServerPolicy return $user->permissions()->server($server)->permission('power')->exists(); } + /** + * Check if user has permission to start a server. + * + * @param Pterodactyl\Models\User $user + * @param Pterodactyl\Models\Server $server + * @return boolean + */ + public function powerStart(User $user, Server $server) + { + if ($this->isOwner($user, $server)) { + return true; + } + + return $user->permissions()->server($server)->permission('power-start')->exists(); + } + + /** + * Check if user has permission to stop a server. + * + * @param Pterodactyl\Models\User $user + * @param Pterodactyl\Models\Server $server + * @return boolean + */ + public function powerStop(User $user, Server $server) + { + if ($this->isOwner($user, $server)) { + return true; + } + + return $user->permissions()->server($server)->permission('power-stop')->exists(); + } + + /** + * Check if user has permission to restart a server. + * + * @param Pterodactyl\Models\User $user + * @param Pterodactyl\Models\Server $server + * @return boolean + */ + public function powerRestart(User $user, Server $server) + { + if ($this->isOwner($user, $server)) { + return true; + } + + return $user->permissions()->server($server)->permission('power-restart')->exists(); + } + + /** + * Check if user has permission to kill a server. + * + * @param Pterodactyl\Models\User $user + * @param Pterodactyl\Models\Server $server + * @return boolean + */ + public function powerKill(User $user, Server $server) + { + if ($this->isOwner($user, $server)) { + return true; + } + + return $user->permissions()->server($server)->permission('power-kill')->exists(); + } + /** * Check if user has permission to run a command on a server. * @@ -67,13 +131,13 @@ class ServerPolicy * @param Pterodactyl\Models\Server $server * @return boolean */ - public function command(User $user, Server $server) + public function sendCommand(User $user, Server $server) { if ($this->isOwner($user, $server)) { return true; } - return $user->permissions()->server($server)->permission('command')->exists(); + return $user->permissions()->server($server)->permission('send-command')->exists(); } /** @@ -212,13 +276,77 @@ class ServerPolicy * @param Pterodactyl\Models\Server $server * @return boolean */ - public function viewSubusers(User $user, Server $server) + public function listSubusers(User $user, Server $server) { if ($this->isOwner($user, $server)) { return true; } - return $user->permissions()->server($server)->permission('view-subusers')->exists(); + return $user->permissions()->server($server)->permission('list-subusers')->exists(); + } + + /** + * Check if user has permission to view specific subuser permissions. + * + * @param Pterodactyl\Models\User $user + * @param Pterodactyl\Models\Server $server + * @return boolean + */ + public function viewSubuser(User $user, Server $server) + { + if ($this->isOwner($user, $server)) { + return true; + } + + return $user->permissions()->server($server)->permission('view-subuser')->exists(); + } + + /** + * Check if user has permission to edit a subuser. + * + * @param Pterodactyl\Models\User $user + * @param Pterodactyl\Models\Server $server + * @return boolean + */ + public function editSubuser(User $user, Server $server) + { + if ($this->isOwner($user, $server)) { + return true; + } + + return $user->permissions()->server($server)->permission('edit-subuser')->exists(); + } + + /** + * Check if user has permission to delete a subuser. + * + * @param Pterodactyl\Models\User $user + * @param Pterodactyl\Models\Server $server + * @return boolean + */ + public function deleteSubuser(User $user, Server $server) + { + if ($this->isOwner($user, $server)) { + return true; + } + + return $user->permissions()->server($server)->permission('delete-subuser')->exists(); + } + + /** + * Check if user has permission to edit a subuser. + * + * @param Pterodactyl\Models\User $user + * @param Pterodactyl\Models\Server $server + * @return boolean + */ + public function createSubuser(User $user, Server $server) + { + if ($this->isOwner($user, $server)) { + return true; + } + + return $user->permissions()->server($server)->permission('create-subuser')->exists(); } /** diff --git a/resources/views/layouts/master.blade.php b/resources/views/layouts/master.blade.php index 9df2f5c82..470f0de82 100644 --- a/resources/views/layouts/master.blade.php +++ b/resources/views/layouts/master.blade.php @@ -194,7 +194,7 @@ {{ trans('pagination.sidebar.server_controls') }} {{ trans('pagination.sidebar.overview') }} @can('list-files', $server){{ trans('pagination.sidebar.files') }}@endcan - @can('view-subusers', $server){{ trans('pagination.sidebar.subusers') }}@endcan + @can('list-subusers', $server){{ trans('pagination.sidebar.subusers') }}@endcan @can('view-manage', $server){{ trans('pagination.sidebar.manage') }}@endcan @endif diff --git a/resources/views/server/index.blade.php b/resources/views/server/index.blade.php index e452230bd..e8e6ddcef 100644 --- a/resources/views/server/index.blade.php +++ b/resources/views/server/index.blade.php @@ -43,14 +43,12 @@

- @can('power', $server) - - - - - - - @endcan + @can('power-start', $server)@endcan + @can('power-restart', $server)@endcan + @can('power-stop', $server)@endcan + @can('power-kill', $server)@endcan + +
@@ -462,87 +460,84 @@ $(window).load(function () { }); }); @endcan - @can('power', $server) - var can_run = true; - function updateServerPowerControls (data) { - - // Reset Console Data - if (data === 2) { - $('#live_console').val($('#live_console').val() + '\n --+ Server Detected as Booting + --\n'); - $('#live_console').scrollTop($('#live_console')[0].scrollHeight); - } - - // Server is On or Starting - if(data == 1 || data == 2) { - $("#console_command").slideDown(); - $('[data-attr="power"][data-action="start"]').addClass('disabled'); - $('[data-attr="power"][data-action="stop"], [data-attr="power"][data-action="restart"]').removeClass('disabled'); - } else { - $("#console_command").slideUp(); - $('[data-attr="power"][data-action="start"]').removeClass('disabled'); - $('[data-attr="power"][data-action="stop"], [data-attr="power"][data-action="restart"]').addClass('disabled'); - } - - if(data !== 0) { - $('[data-attr="power"][data-action="kill"]').removeClass('disabled'); - } else { - $('[data-attr="power"][data-action="kill"]').addClass('disabled'); - } + var can_run = true; + function updateServerPowerControls (data) { + // Reset Console Data + if (data === 2) { + $('#live_console').val($('#live_console').val() + '\n --+ Server Detected as Booting + --\n'); + $('#live_console').scrollTop($('#live_console')[0].scrollHeight); } - $('[data-attr="power"]').click(function (event) { - event.preventDefault(); - var action = $(this).data('action'); - var killConfirm = false; - if (action === 'kill') { - swal({ - type: 'warning', - title: '', - text: 'This operation will not save your server data gracefully. You should only use this if your server is failing to respond to normal stop commands.', - showCancelButton: true, - allowOutsideClick: true, - closeOnConfirm: true, - confirmButtonText: 'Kill Server', - confirmButtonColor: '#d9534f' - }, function () { - setTimeout(function() { - powerToggleServer('kill'); - }, 100); - }); - } else { - powerToggleServer(action); - } + // Server is On or Starting + if(data == 1 || data == 2) { + $("#console_command").slideDown(); + $('[data-attr="power"][data-action="start"]').addClass('disabled'); + $('[data-attr="power"][data-action="stop"], [data-attr="power"][data-action="restart"]').removeClass('disabled'); + } else { + $("#console_command").slideUp(); + $('[data-attr="power"][data-action="start"]').removeClass('disabled'); + $('[data-attr="power"][data-action="stop"], [data-attr="power"][data-action="restart"]').addClass('disabled'); + } - }); + if(data !== 0) { + $('[data-attr="power"][data-action="kill"]').removeClass('disabled'); + } else { + $('[data-attr="power"][data-action="kill"]').addClass('disabled'); + } - function powerToggleServer(action) { - $.ajax({ - type: 'PUT', - headers: { - 'X-Access-Token': '{{ $server->daemonSecret }}', - 'X-Access-Server': '{{ $server->uuid }}' - }, - contentType: 'application/json; charset=utf-8', - data: JSON.stringify({ - action: action - }), - url: '{{ $node->scheme }}://{{ $node->fqdn }}:{{ $node->daemonListen }}/server/power', - timeout: 10000 - }).fail(function(jqXHR) { - var error = 'An error occured while trying to process this request.'; - if (typeof jqXHR.responseJSON !== 'undefined' && typeof jqXHR.responseJSON.error !== 'undefined') { - error = jqXHR.responseJSON.error; - } - swal({ - type: 'error', - title: 'Whoops!', - text: error - }); + } + + $('[data-attr="power"]').click(function (event) { + event.preventDefault(); + var action = $(this).data('action'); + var killConfirm = false; + if (action === 'kill') { + swal({ + type: 'warning', + title: '', + text: 'This operation will not save your server data gracefully. You should only use this if your server is failing to respond to normal stop commands.', + showCancelButton: true, + allowOutsideClick: true, + closeOnConfirm: true, + confirmButtonText: 'Kill Server', + confirmButtonColor: '#d9534f' + }, function () { + setTimeout(function() { + powerToggleServer('kill'); + }, 100); }); + } else { + powerToggleServer(action); } - @endcan + }); + + function powerToggleServer(action) { + $.ajax({ + type: 'PUT', + headers: { + 'X-Access-Token': '{{ $server->daemonSecret }}', + 'X-Access-Server': '{{ $server->uuid }}' + }, + contentType: 'application/json; charset=utf-8', + data: JSON.stringify({ + action: action + }), + url: '{{ $node->scheme }}://{{ $node->fqdn }}:{{ $node->daemonListen }}/server/power', + timeout: 10000 + }).fail(function(jqXHR) { + var error = 'An error occured while trying to process this request.'; + if (typeof jqXHR.responseJSON !== 'undefined' && typeof jqXHR.responseJSON.error !== 'undefined') { + error = jqXHR.responseJSON.error; + } + swal({ + type: 'error', + title: 'Whoops!', + text: error + }); + }); + } }); $(document).ready(function () {