Refactor subuser permissions (#1961)

Co-authored-by: RMartinOscar <40749467+RMartinOscar@users.noreply.github.com>
This commit is contained in:
Boy132
2025-12-11 14:34:27 +01:00
committed by GitHub
parent 1ab4ddb07c
commit 760aaf9bfb
112 changed files with 610 additions and 668 deletions

View File

@@ -4,13 +4,12 @@ namespace App\Http\Controllers\Api\Client;
use App\Http\Requests\Api\Client\GetServersRequest;
use App\Models\Filters\MultiFieldServerFilter;
use App\Models\Permission;
use App\Models\Server;
use App\Models\Subuser;
use App\Transformers\Api\Client\ServerTransformer;
use Dedoc\Scramble\Attributes\Group;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Collection;
use Spatie\QueryBuilder\AllowedFilter;
use Spatie\QueryBuilder\QueryBuilder;
@@ -81,14 +80,14 @@ class ClientController extends ClientApiController
*
* Returns all the subuser permissions available on the system.
*
* @return array{object: string, attributes: array{permissions: Collection}}
* @return array{object: string, attributes: array{permissions: string[]}}
*/
public function permissions(): array
{
return [
'object' => 'system_permissions',
'attributes' => [
'permissions' => Permission::permissions(),
'permissions' => Subuser::allPermissionKeys(),
],
];
}

View File

@@ -2,10 +2,10 @@
namespace App\Http\Controllers\Api\Client\Servers;
use App\Enums\SubuserPermission;
use App\Http\Controllers\Api\Client\ClientApiController;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\ActivityLog;
use App\Models\Permission;
use App\Models\Role;
use App\Models\Server;
use App\Models\User;
@@ -29,7 +29,7 @@ class ActivityLogController extends ClientApiController
*/
public function __invoke(ClientApiRequest $request, Server $server): array
{
Gate::authorize(Permission::ACTION_ACTIVITY_READ, $server);
Gate::authorize(SubuserPermission::ActivityRead, $server);
$activity = QueryBuilder::for($server->activity())
->allowedSorts(['timestamp'])

View File

@@ -3,13 +3,13 @@
namespace App\Http\Controllers\Api\Client\Servers;
use App\Enums\ServerState;
use App\Enums\SubuserPermission;
use App\Facades\Activity;
use App\Http\Controllers\Api\Client\ClientApiController;
use App\Http\Requests\Api\Client\Servers\Backups\RenameBackupRequest;
use App\Http\Requests\Api\Client\Servers\Backups\RestoreBackupRequest;
use App\Http\Requests\Api\Client\Servers\Backups\StoreBackupRequest;
use App\Models\Backup;
use App\Models\Permission;
use App\Models\Server;
use App\Repositories\Daemon\DaemonBackupRepository;
use App\Services\Backups\DeleteBackupService;
@@ -48,7 +48,7 @@ class BackupController extends ClientApiController
*/
public function index(Request $request, Server $server): array
{
if (!$request->user()->can(Permission::ACTION_BACKUP_READ, $server)) {
if (!$request->user()->can(SubuserPermission::BackupRead, $server)) {
throw new AuthorizationException();
}
@@ -82,7 +82,7 @@ class BackupController extends ClientApiController
// otherwise ignore this status. This gets a little funky since it isn't clear
// how best to allow a user to create a backup that is locked without also preventing
// them from just filling up a server with backups that can never be deleted?
if ($request->user()->can(Permission::ACTION_BACKUP_DELETE, $server)) {
if ($request->user()->can(SubuserPermission::BackupDelete, $server)) {
$action->setIsLocked((bool) $request->input('is_locked'));
}
@@ -110,7 +110,7 @@ class BackupController extends ClientApiController
*/
public function toggleLock(Request $request, Server $server, Backup $backup): array
{
if (!$request->user()->can(Permission::ACTION_BACKUP_DELETE, $server)) {
if (!$request->user()->can(SubuserPermission::BackupDelete, $server)) {
throw new AuthorizationException();
}
@@ -136,7 +136,7 @@ class BackupController extends ClientApiController
*/
public function view(Request $request, Server $server, Backup $backup): array
{
if (!$request->user()->can(Permission::ACTION_BACKUP_READ, $server)) {
if (!$request->user()->can(SubuserPermission::BackupRead, $server)) {
throw new AuthorizationException();
}
@@ -155,7 +155,7 @@ class BackupController extends ClientApiController
*/
public function delete(Request $request, Server $server, Backup $backup): JsonResponse
{
if (!$request->user()->can(Permission::ACTION_BACKUP_DELETE, $server)) {
if (!$request->user()->can(SubuserPermission::BackupDelete, $server)) {
throw new AuthorizationException();
}
@@ -181,7 +181,7 @@ class BackupController extends ClientApiController
*/
public function download(Request $request, Server $server, Backup $backup): JsonResponse
{
if (!$request->user()->can(Permission::ACTION_BACKUP_DOWNLOAD, $server)) {
if (!$request->user()->can(SubuserPermission::BackupDownload, $server)) {
throw new AuthorizationException();
}

View File

@@ -2,6 +2,7 @@
namespace App\Http\Controllers\Api\Client\Servers;
use App\Enums\SubuserPermission;
use App\Exceptions\Http\HttpForbiddenException;
use App\Exceptions\Model\DataValidationException;
use App\Exceptions\Service\ServiceLimitExceededException;
@@ -9,7 +10,6 @@ use App\Facades\Activity;
use App\Http\Controllers\Api\Client\ClientApiController;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Http\Requests\Api\Client\Servers\Schedules\StoreTaskRequest;
use App\Models\Permission;
use App\Models\Schedule;
use App\Models\Server;
use App\Models\Task;
@@ -170,7 +170,7 @@ class ScheduleTaskController extends ClientApiController
throw new NotFoundHttpException();
}
if (!$request->user()->can(Permission::ACTION_SCHEDULE_DELETE, $server)) {
if (!$request->user()->can(SubuserPermission::ScheduleDelete, $server)) {
throw new HttpForbiddenException('You do not have permission to perform this action.');
}

View File

@@ -2,6 +2,7 @@
namespace App\Http\Controllers\Api\Client\Servers;
use App\Enums\SubuserPermission;
use App\Exceptions\Model\DataValidationException;
use App\Exceptions\Service\Subuser\ServerSubuserExistsException;
use App\Exceptions\Service\Subuser\UserIsServerOwnerException;
@@ -11,7 +12,6 @@ use App\Http\Requests\Api\Client\Servers\Subusers\DeleteSubuserRequest;
use App\Http\Requests\Api\Client\Servers\Subusers\GetSubuserRequest;
use App\Http\Requests\Api\Client\Servers\Subusers\StoreSubuserRequest;
use App\Http\Requests\Api\Client\Servers\Subusers\UpdateSubuserRequest;
use App\Models\Permission;
use App\Models\Server;
use App\Models\Subuser;
use App\Models\User;
@@ -82,18 +82,17 @@ class SubuserController extends ClientApiController
*/
public function store(StoreSubuserRequest $request, Server $server): array
{
$response = $this->creationService->handle(
$server,
$request->input('email'),
$this->getDefaultPermissions($request)
);
$email = $request->input('email');
$permissions = $this->getCleanedPermissions($request);
$subuser = $this->creationService->handle($server, $email, $permissions);
Activity::event('server:subuser.create')
->subject($response->user)
->property(['email' => $request->input('email'), 'permissions' => $this->getDefaultPermissions($request)])
->subject($subuser->user)
->property(['email' => $email, 'permissions' => $subuser->permissions])
->log();
return $this->fractal->item($response)
return $this->fractal->item($subuser)
->transformWith($this->getTransformer(SubuserTransformer::class))
->toArray();
}
@@ -112,7 +111,7 @@ class SubuserController extends ClientApiController
/** @var Subuser $subuser */
$subuser = $request->attributes->get('subuser');
$this->updateService->handle($subuser, $server, $this->getDefaultPermissions($request));
$this->updateService->handle($subuser, $server, $this->getCleanedPermissions($request));
return $this->fractal->item($subuser->refresh())
->transformWith($this->getTransformer(SubuserTransformer::class))
@@ -135,17 +134,19 @@ class SubuserController extends ClientApiController
}
/**
* Returns the default permissions for subusers and parses out any permissions
* Returns the "cleaned" permissions for subusers and parses out any permissions
* that were passed that do not also exist in the internally tracked list of
* permissions.
*
* @return array<array-key, mixed>
* @return string[]
*/
protected function getDefaultPermissions(Request $request): array
protected function getCleanedPermissions(Request $request): array
{
$allowed = Permission::permissionKeys()->all();
$cleaned = array_intersect($request->input('permissions') ?? [], $allowed);
return array_unique(array_merge($cleaned, [Permission::ACTION_WEBSOCKET_CONNECT]));
return collect($request->input('permissions') ?? [])
->intersect(Subuser::allPermissionKeys())
->push(SubuserPermission::WebsocketConnect->value)
->unique()
->values()
->toArray();
}
}

View File

@@ -2,10 +2,10 @@
namespace App\Http\Controllers\Api\Client\Servers;
use App\Enums\SubuserPermission;
use App\Exceptions\Http\HttpForbiddenException;
use App\Http\Controllers\Api\Client\ClientApiController;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
use App\Models\Server;
use App\Services\Nodes\NodeJWTService;
use App\Services\Servers\GetUserPermissionsService;
@@ -37,7 +37,7 @@ class WebsocketController extends ClientApiController
public function __invoke(ClientApiRequest $request, Server $server): JsonResponse
{
$user = $request->user();
if ($user->cannot(Permission::ACTION_WEBSOCKET_CONNECT, $server)) {
if ($user->cannot(SubuserPermission::WebsocketConnect, $server)) {
throw new HttpForbiddenException('You do not have permission to connect to this server\'s websocket.');
}

View File

@@ -2,11 +2,11 @@
namespace App\Http\Controllers\Api\Remote;
use App\Enums\SubuserPermission;
use App\Exceptions\Http\HttpForbiddenException;
use App\Facades\Activity;
use App\Http\Controllers\Controller;
use App\Http\Requests\Api\Remote\SftpAuthenticationFormRequest;
use App\Models\Permission;
use App\Models\Server;
use App\Models\User;
use App\Services\Servers\GetUserPermissionsService;
@@ -141,7 +141,7 @@ class SftpAuthenticationController extends Controller
if ($user->cannot('update server', $server) && $server->owner_id !== $user->id) {
$permissions = $this->permissions->handle($server, $user);
if (!in_array(Permission::ACTION_FILE_SFTP, $permissions)) {
if (!in_array(SubuserPermission::FileSftp->value, $permissions)) {
Activity::event('server:sftp.denied')->actor($user)->subject($server)->log();
throw new HttpForbiddenException('You do not have permission to access SFTP for this server.');

View File

@@ -2,14 +2,14 @@
namespace App\Http\Requests\Api\Client\Servers\Backups;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class RenameBackupRequest extends ClientApiRequest
{
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_BACKUP_DELETE;
return SubuserPermission::BackupDelete;
}
public function rules(): array

View File

@@ -2,14 +2,14 @@
namespace App\Http\Requests\Api\Client\Servers\Backups;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class RestoreBackupRequest extends ClientApiRequest
{
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_BACKUP_RESTORE;
return SubuserPermission::BackupRestore;
}
public function rules(): array

View File

@@ -2,14 +2,14 @@
namespace App\Http\Requests\Api\Client\Servers\Backups;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class StoreBackupRequest extends ClientApiRequest
{
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_BACKUP_CREATE;
return SubuserPermission::BackupCreate;
}
public function rules(): array

View File

@@ -3,13 +3,13 @@
namespace App\Http\Requests\Api\Client\Servers\Databases;
use App\Contracts\Http\ClientPermissionsRequest;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class DeleteDatabaseRequest extends ClientApiRequest implements ClientPermissionsRequest
{
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_DATABASE_DELETE;
return SubuserPermission::DatabaseDelete;
}
}

View File

@@ -3,13 +3,13 @@
namespace App\Http\Requests\Api\Client\Servers\Databases;
use App\Contracts\Http\ClientPermissionsRequest;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class GetDatabasesRequest extends ClientApiRequest implements ClientPermissionsRequest
{
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_DATABASE_READ;
return SubuserPermission::DatabaseRead;
}
}

View File

@@ -2,16 +2,16 @@
namespace App\Http\Requests\Api\Client\Servers\Databases;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class RotatePasswordRequest extends ClientApiRequest
{
/**
* Check that the user has permission to rotate the password.
*/
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_DATABASE_UPDATE;
return SubuserPermission::DatabaseUpdate;
}
}

View File

@@ -3,9 +3,9 @@
namespace App\Http\Requests\Api\Client\Servers\Databases;
use App\Contracts\Http\ClientPermissionsRequest;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Database;
use App\Models\Permission;
use App\Models\Server;
use App\Services\Databases\DatabaseManagementService;
use Illuminate\Database\Query\Builder;
@@ -14,9 +14,9 @@ use Webmozart\Assert\Assert;
class StoreDatabaseRequest extends ClientApiRequest implements ClientPermissionsRequest
{
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_DATABASE_CREATE;
return SubuserPermission::DatabaseCreate;
}
public function rules(): array

View File

@@ -3,14 +3,14 @@
namespace App\Http\Requests\Api\Client\Servers\Files;
use App\Contracts\Http\ClientPermissionsRequest;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class ChmodFilesRequest extends ClientApiRequest implements ClientPermissionsRequest
{
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_FILE_UPDATE;
return SubuserPermission::FileUpdate;
}
public function rules(): array

View File

@@ -2,17 +2,17 @@
namespace App\Http\Requests\Api\Client\Servers\Files;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class CompressFilesRequest extends ClientApiRequest
{
/**
* Checks that the authenticated user is allowed to create archives for this server.
*/
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_FILE_ARCHIVE;
return SubuserPermission::FileArchive;
}
public function rules(): array

View File

@@ -3,14 +3,14 @@
namespace App\Http\Requests\Api\Client\Servers\Files;
use App\Contracts\Http\ClientPermissionsRequest;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class CopyFileRequest extends ClientApiRequest implements ClientPermissionsRequest
{
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_FILE_CREATE;
return SubuserPermission::FileCreate;
}
public function rules(): array

View File

@@ -2,17 +2,17 @@
namespace App\Http\Requests\Api\Client\Servers\Files;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class CreateFolderRequest extends ClientApiRequest
{
/**
* Checks that the authenticated user is allowed to create files on the server.
*/
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_FILE_CREATE;
return SubuserPermission::FileCreate;
}
public function rules(): array

View File

@@ -2,8 +2,8 @@
namespace App\Http\Requests\Api\Client\Servers\Files;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class DecompressFilesRequest extends ClientApiRequest
{
@@ -12,9 +12,9 @@ class DecompressFilesRequest extends ClientApiRequest
* rely on the archive permission here as it makes more sense to make sure the user can create
* additional files rather than make an archive.
*/
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_FILE_CREATE;
return SubuserPermission::FileCreate;
}
public function rules(): array

View File

@@ -3,14 +3,14 @@
namespace App\Http\Requests\Api\Client\Servers\Files;
use App\Contracts\Http\ClientPermissionsRequest;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class DeleteFileRequest extends ClientApiRequest implements ClientPermissionsRequest
{
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_FILE_DELETE;
return SubuserPermission::FileDelete;
}
/**

View File

@@ -3,8 +3,8 @@
namespace App\Http\Requests\Api\Client\Servers\Files;
use App\Contracts\Http\ClientPermissionsRequest;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class GetFileContentsRequest extends ClientApiRequest implements ClientPermissionsRequest
{
@@ -13,9 +13,9 @@ class GetFileContentsRequest extends ClientApiRequest implements ClientPermissio
* validate that the authenticated user has permission to perform this action aganist
* the given resource (server).
*/
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_FILE_READ_CONTENT;
return SubuserPermission::FileReadContent;
}
public function rules(): array

View File

@@ -2,8 +2,8 @@
namespace App\Http\Requests\Api\Client\Servers\Files;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class ListFilesRequest extends ClientApiRequest
{
@@ -11,9 +11,9 @@ class ListFilesRequest extends ClientApiRequest
* Check that the user making this request to the API is authorized to list all
* the files that exist for a given server.
*/
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_FILE_READ;
return SubuserPermission::FileRead;
}
public function rules(): array

View File

@@ -3,14 +3,14 @@
namespace App\Http\Requests\Api\Client\Servers\Files;
use App\Contracts\Http\ClientPermissionsRequest;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class PullFileRequest extends ClientApiRequest implements ClientPermissionsRequest
{
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_FILE_CREATE;
return SubuserPermission::FileCreate;
}
public function rules(): array

View File

@@ -3,8 +3,8 @@
namespace App\Http\Requests\Api\Client\Servers\Files;
use App\Contracts\Http\ClientPermissionsRequest;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class RenameFileRequest extends ClientApiRequest implements ClientPermissionsRequest
{
@@ -12,9 +12,9 @@ class RenameFileRequest extends ClientApiRequest implements ClientPermissionsReq
* The permission the user is required to have in order to perform this
* request action.
*/
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_FILE_UPDATE;
return SubuserPermission::FileUpdate;
}
public function rules(): array

View File

@@ -2,13 +2,13 @@
namespace App\Http\Requests\Api\Client\Servers\Files;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class UploadFileRequest extends ClientApiRequest
{
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_FILE_CREATE;
return SubuserPermission::FileCreate;
}
}

View File

@@ -3,8 +3,8 @@
namespace App\Http\Requests\Api\Client\Servers\Files;
use App\Contracts\Http\ClientPermissionsRequest;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class WriteFileContentRequest extends ClientApiRequest implements ClientPermissionsRequest
{
@@ -13,9 +13,9 @@ class WriteFileContentRequest extends ClientApiRequest implements ClientPermissi
* validate that the authenticated user has permission to perform this action aganist
* the given resource (server).
*/
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_FILE_CREATE;
return SubuserPermission::FileCreate;
}
/**

View File

@@ -2,13 +2,13 @@
namespace App\Http\Requests\Api\Client\Servers\Network;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class DeleteAllocationRequest extends ClientApiRequest
{
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_ALLOCATION_DELETE;
return SubuserPermission::AllocationDelete;
}
}

View File

@@ -2,8 +2,8 @@
namespace App\Http\Requests\Api\Client\Servers\Network;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class GetNetworkRequest extends ClientApiRequest
{
@@ -11,8 +11,8 @@ class GetNetworkRequest extends ClientApiRequest
* Check that the user has permission to view the allocations for
* this server.
*/
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_ALLOCATION_READ;
return SubuserPermission::AllocationRead;
}
}

View File

@@ -2,13 +2,13 @@
namespace App\Http\Requests\Api\Client\Servers\Network;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class NewAllocationRequest extends ClientApiRequest
{
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_ALLOCATION_CREATE;
return SubuserPermission::AllocationCreate;
}
}

View File

@@ -2,15 +2,15 @@
namespace App\Http\Requests\Api\Client\Servers\Network;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Allocation;
use App\Models\Permission;
class UpdateAllocationRequest extends ClientApiRequest
{
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_ALLOCATION_UPDATE;
return SubuserPermission::AllocationUpdate;
}
public function rules(): array

View File

@@ -2,12 +2,12 @@
namespace App\Http\Requests\Api\Client\Servers\Schedules;
use App\Models\Permission;
use App\Enums\SubuserPermission;
class DeleteScheduleRequest extends ViewScheduleRequest
{
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_SCHEDULE_DELETE;
return SubuserPermission::ScheduleDelete;
}
}

View File

@@ -2,14 +2,14 @@
namespace App\Http\Requests\Api\Client\Servers\Schedules;
use App\Models\Permission;
use App\Enums\SubuserPermission;
use App\Models\Schedule;
class StoreScheduleRequest extends ViewScheduleRequest
{
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_SCHEDULE_CREATE;
return SubuserPermission::ScheduleCreate;
}
public function rules(): array

View File

@@ -2,7 +2,7 @@
namespace App\Http\Requests\Api\Client\Servers\Schedules;
use App\Models\Permission;
use App\Enums\SubuserPermission;
class StoreTaskRequest extends ViewScheduleRequest
{
@@ -11,9 +11,9 @@ class StoreTaskRequest extends ViewScheduleRequest
* check if they can modify a schedule to determine if they're able to do this. There
* are no task specific permissions.
*/
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_SCHEDULE_UPDATE;
return SubuserPermission::ScheduleUpdate;
}
public function rules(): array

View File

@@ -2,14 +2,14 @@
namespace App\Http\Requests\Api\Client\Servers\Schedules;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class TriggerScheduleRequest extends ClientApiRequest
{
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_SCHEDULE_UPDATE;
return SubuserPermission::ScheduleUpdate;
}
public function rules(): array

View File

@@ -2,12 +2,12 @@
namespace App\Http\Requests\Api\Client\Servers\Schedules;
use App\Models\Permission;
use App\Enums\SubuserPermission;
class UpdateScheduleRequest extends StoreScheduleRequest
{
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_SCHEDULE_UPDATE;
return SubuserPermission::ScheduleUpdate;
}
}

View File

@@ -2,8 +2,8 @@
namespace App\Http\Requests\Api\Client\Servers\Schedules;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
use App\Models\Schedule;
use App\Models\Server;
use App\Models\Task;
@@ -36,8 +36,8 @@ class ViewScheduleRequest extends ClientApiRequest
return true;
}
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_SCHEDULE_READ;
return SubuserPermission::ScheduleRead;
}
}

View File

@@ -2,17 +2,17 @@
namespace App\Http\Requests\Api\Client\Servers;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class SendCommandRequest extends ClientApiRequest
{
/**
* Determine if the API user has permission to perform this action.
*/
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_CONTROL_CONSOLE;
return SubuserPermission::ControlConsole;
}
/**

View File

@@ -2,28 +2,28 @@
namespace App\Http\Requests\Api\Client\Servers;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class SendPowerRequest extends ClientApiRequest
{
/**
* Determine if the user has permission to send a power command to a server.
*/
public function permission(): string
public function permission(): SubuserPermission
{
switch ($this->input('signal')) {
case 'start':
return Permission::ACTION_CONTROL_START;
return SubuserPermission::ControlStart;
case 'stop':
case 'kill':
return Permission::ACTION_CONTROL_STOP;
return SubuserPermission::ControlStop;
case 'restart':
return Permission::ACTION_CONTROL_RESTART;
return SubuserPermission::ControlRestart;
}
// Fallback for invalid signals
return Permission::ACTION_WEBSOCKET_CONNECT;
return SubuserPermission::WebsocketConnect;
}
/**

View File

@@ -3,8 +3,8 @@
namespace App\Http\Requests\Api\Client\Servers\Settings;
use App\Contracts\Http\ClientPermissionsRequest;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class DescriptionServerRequest extends ClientApiRequest implements ClientPermissionsRequest
{
@@ -13,9 +13,9 @@ class DescriptionServerRequest extends ClientApiRequest implements ClientPermiss
* validate that the authenticated user has permission to perform this action against
* the given resource (server).
*/
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_SETTINGS_DESCRIPTION;
return SubuserPermission::SettingsDescription;
}
/**

View File

@@ -2,13 +2,13 @@
namespace App\Http\Requests\Api\Client\Servers\Settings;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class ReinstallServerRequest extends ClientApiRequest
{
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_SETTINGS_REINSTALL;
return SubuserPermission::SettingsReinstall;
}
}

View File

@@ -3,8 +3,8 @@
namespace App\Http\Requests\Api\Client\Servers\Settings;
use App\Contracts\Http\ClientPermissionsRequest;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
use App\Models\Server;
class RenameServerRequest extends ClientApiRequest implements ClientPermissionsRequest
@@ -14,9 +14,9 @@ class RenameServerRequest extends ClientApiRequest implements ClientPermissionsR
* validate that the authenticated user has permission to perform this action against
* the given resource (server).
*/
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_SETTINGS_RENAME;
return SubuserPermission::SettingsRename;
}
/**

View File

@@ -3,17 +3,17 @@
namespace App\Http\Requests\Api\Client\Servers\Settings;
use App\Contracts\Http\ClientPermissionsRequest;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
use App\Models\Server;
use Illuminate\Validation\Rule;
use Webmozart\Assert\Assert;
class SetDockerImageRequest extends ClientApiRequest implements ClientPermissionsRequest
{
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_STARTUP_DOCKER_IMAGE;
return SubuserPermission::StartupDockerImage;
}
public function rules(): array

View File

@@ -2,13 +2,13 @@
namespace App\Http\Requests\Api\Client\Servers\Startup;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class GetStartupRequest extends ClientApiRequest
{
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_STARTUP_READ;
return SubuserPermission::StartupRead;
}
}

View File

@@ -2,14 +2,14 @@
namespace App\Http\Requests\Api\Client\Servers\Startup;
use App\Enums\SubuserPermission;
use App\Http\Requests\Api\Client\ClientApiRequest;
use App\Models\Permission;
class UpdateStartupVariableRequest extends ClientApiRequest
{
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_STARTUP_UPDATE;
return SubuserPermission::StartupUpdate;
}
/**

View File

@@ -2,12 +2,12 @@
namespace App\Http\Requests\Api\Client\Servers\Subusers;
use App\Models\Permission;
use App\Enums\SubuserPermission;
class DeleteSubuserRequest extends SubuserRequest
{
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_USER_DELETE;
return SubuserPermission::UserDelete;
}
}

View File

@@ -2,15 +2,15 @@
namespace App\Http\Requests\Api\Client\Servers\Subusers;
use App\Models\Permission;
use App\Enums\SubuserPermission;
class GetSubuserRequest extends SubuserRequest
{
/**
* Confirm that a user is able to view subusers for the specified server.
*/
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_USER_READ;
return SubuserPermission::UserRead;
}
}

View File

@@ -2,13 +2,13 @@
namespace App\Http\Requests\Api\Client\Servers\Subusers;
use App\Models\Permission;
use App\Enums\SubuserPermission;
class StoreSubuserRequest extends SubuserRequest
{
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_USER_CREATE;
return SubuserPermission::UserCreate;
}
public function rules(): array

View File

@@ -2,13 +2,13 @@
namespace App\Http\Requests\Api\Client\Servers\Subusers;
use App\Models\Permission;
use App\Enums\SubuserPermission;
class UpdateSubuserRequest extends SubuserRequest
{
public function permission(): string
public function permission(): SubuserPermission
{
return Permission::ACTION_USER_UPDATE;
return SubuserPermission::UserUpdate;
}
public function rules(): array