diff --git a/app/Filament/Server/Resources/Subusers/SubuserResource.php b/app/Filament/Server/Resources/Subusers/SubuserResource.php index bcb1976c4c..ad8662dc6c 100644 --- a/app/Filament/Server/Resources/Subusers/SubuserResource.php +++ b/app/Filament/Server/Resources/Subusers/SubuserResource.php @@ -79,15 +79,15 @@ public static function defaultTable(Table $table): Table foreach ($data['permissions'] as $permission) { $options[$permission] = str($permission)->headline(); - $descriptions[$permission] = trans('server/user.permissions.' . $data['name'] . '_' . str($permission)->replace('-', '_')); + $descriptions[$permission] = trans($data['translation_prefix']. '.' . $data['name'] . '_' . str($permission)->replace('-', '_')); $permissionsArray[$data['name']][] = $permission; } $tabs[] = Tab::make($data['name']) - ->label(str($data['name'])->headline()) + ->label(trans($data['translation_prefix']. '.' . $data['name'] . '_title')) ->schema([ Section::make() - ->description(trans('server/user.permissions.' . $data['name'] . '_desc')) + ->description(trans($data['translation_prefix']. '.' . $data['name'] . '_desc')) ->icon($data['icon']) ->contained(false) ->schema([ diff --git a/app/Models/Subuser.php b/app/Models/Subuser.php index 80d74242f9..09c7ebb0c7 100644 --- a/app/Models/Subuser.php +++ b/app/Models/Subuser.php @@ -5,6 +5,7 @@ use App\Contracts\Validatable; use App\Enums\SubuserPermission; use App\Traits\HasValidation; +use BackedEnum; use Carbon\Carbon; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; @@ -33,17 +34,21 @@ class Subuser extends Model implements Validatable */ public const RESOURCE_NAME = 'server_subuser'; - /** @var array */ + /** @var array */ protected static array $customPermissions = []; /** @param string[] $permissions */ - public static function registerCustomPermissions(string $name, array $permissions, ?string $icon = null, ?bool $hidden = null): void + public static function registerCustomPermissions(string $name, array $permissions, ?string $translationPrefix = null, null|string|BackedEnum $icon = null, ?bool $hidden = null): void { $customPermission = static::$customPermissions[$name] ?? []; $customPermission['name'] = $name; $customPermission['permissions'] = array_merge($customPermission['permissions'] ?? [], $permissions); + if (!is_null($translationPrefix)) { + $customPermission['translation_prefix'] = $translationPrefix; + } + if (!is_null($icon)) { $customPermission['icon'] = $icon; } @@ -93,7 +98,7 @@ public function user(): BelongsTo return $this->belongsTo(User::class); } - /** @return array */ + /** @return array */ public static function allPermissionData(): array { $allPermissions = []; @@ -106,6 +111,7 @@ public static function allPermissionData(): array 'hidden' => $subuserPermission->isHidden(), 'icon' => $subuserPermission->getIcon(), 'permissions' => array_merge($allPermissions[$group]['permissions'] ?? [], [$permission]), + 'translation_prefix' => 'server/user.permissions', ]; } @@ -119,6 +125,7 @@ public static function allPermissionData(): array 'hidden' => $customPermission['hidden'] ?? $groupData['hidden'] ?? false, 'icon' => $customPermission['icon'] ?? $groupData['icon'], 'permissions' => array_unique(array_merge($groupData['permissions'] ?? [], $customPermission['permissions'])), + 'translation_prefix' => $customPermission['translation_prefix'] ?? $groupData['translation_prefix'] ?? 'server/user.permissions', ]; $allPermissions[$name] = $groupData; diff --git a/lang/en/server/user.php b/lang/en/server/user.php index a56c719615..a1b2d3e3d5 100644 --- a/lang/en/server/user.php +++ b/lang/en/server/user.php @@ -17,33 +17,60 @@ 'notification_failed' => 'Failed to invite user!', 'permissions' => [ 'title' => 'Permissions', + + 'activity_title' => 'Activity', 'activity_desc' => 'Permissions that control a user\'s access to the server activity logs.', + + 'startup_title' => 'Startup', 'startup_desc' => 'Permissions that control a user\'s ability to view this server\'s startup parameters.', + + 'settings_title' => 'Settings', 'settings_desc' => 'Permissions that control a user\'s ability to modify this server\'s settings.', + + 'control_title' => 'Control', 'control_desc' => 'Permissions that control a user\'s ability to control the power state of a server, or send commands.', + + 'user_title' => 'User', 'user_desc' => 'Permissions that allow a user to manage other subusers on a server. They will never be able to edit their own account, or assign permissions they do not have themselves.', + + 'file_title' => 'File', 'file_desc' => 'Permissions that control a user\'s ability to modify the filesystem for this server.', + + 'allocation_title' => 'Allocation', 'allocation_desc' => 'Permissions that control a user\'s ability to modify the port allocations for this server.', + + 'database_title' => 'Database', 'database_desc' => 'Permissions that control a user\'s access to the database management for this server.', + + 'backup_title' => 'Backup', 'backup_desc' => 'Permissions that control a user\'s ability to generate and manage server backups.', + + 'schedule_title' => 'Schedule', 'schedule_desc' => 'Permissions that control a user\'s access to the schedule management for this server.', + 'startup_read' => 'Allows a user to view the startup variables for a server.', 'startup_update' => 'Allows a user to modify the startup variables for the server.', 'startup_docker_image' => 'Allows a user to modify the Docker image used when running the server.', + 'settings_reinstall' => 'Allows a user to trigger a reinstall of this server.', 'settings_rename' => 'Allows a user to rename this server.', 'settings_description' => 'Allows a user to change the description of this server.', + 'activity_read' => 'Allows a user to view the activity logs for the server.', + 'websocket_connect' => 'Allows a user access to the websocket for this server.', + 'control_console' => 'Allows a user to send data to the server console.', 'control_start' => 'Allows a user to start the server instance.', 'control_stop' => 'Allows a user to stop the server instance.', 'control_restart' => 'Allows a user to restart the server instance.', 'control_kill' => 'Allows a user to kill the server instance.', + 'user_create' => 'Allows a user to create new user accounts for the server.', 'user_read' => 'Allows a user permission to view users associated with this server.', 'user_update' => 'Allows a user to modify other users associated with this server.', 'user_delete' => 'Allows a user to delete other users associated with this server.', + 'file_create' => 'Allows a user permission to create new files and directories.', 'file_read' => 'Allows a user to view the contents of a directory, but not view the contents of or download files.', 'file_read_content' => 'Allows a user to view the contents of a given file. This will also allow the user to download files.', @@ -51,19 +78,23 @@ 'file_delete' => 'Allows a user to delete files and directories.', 'file_archive' => 'Allows a user to create file archives and decompress existing archives.', 'file_sftp' => 'Allows a user to perform the above file actions using a SFTP client.', + 'allocation_read' => 'Allows a user to view all allocations currently assigned to this server. Users with any level of access to this server can always view the primary allocation.', 'allocation_update' => 'Allows a user to change the primary server allocation and attach notes to each allocation.', 'allocation_delete' => 'Allows a user to delete an allocation from the server.', 'allocation_create' => 'Allows a user to assign additional allocations to the server.', + 'database_create' => 'Allows a user permission to create a new database for the server.', 'database_read' => 'Allows a user permission to view the server databases.', 'database_update' => 'Allows a user permission to make modifications to a database. If the user does not have the "View Password" permission as well they will not be able to modify the password.', 'database_delete' => 'Allows a user permission to delete a database instance.', 'database_view_password' => 'Allows a user permission to view a database password in the system.', + 'schedule_create' => 'Allows a user to create a new schedule for the server.', 'schedule_read' => 'Allows a user permission to view schedules for a server.', 'schedule_update' => 'Allows a user permission to make modifications to an existing server schedule.', 'schedule_delete' => 'Allows a user to delete a schedule for the server.', + 'backup_create' => 'Allows a user to create new backups for this server.', 'backup_read' => 'Allows a user to view all backups that exist for this server.', 'backup_delete' => 'Allows a user to remove backups from the system.',