## Summary - add explicit workspace closure and tenant removal lifecycle truth with a bounded `WorkspaceLifecycleService` - surface closure and removal posture across admin/system pages, chooser recovery, and canonical historical viewers - block new review-pack and operation starts for closed workspaces or removed tenants while preserving memberships, audit, and history - add focused Pest coverage plus the Spec 292 artifacts for the implemented slice ## Testing - `export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && cd apps/platform && ./vendor/bin/sail artisan test --compact tests/Feature/System/Directory/ViewWorkspaceClosureTest.php tests/Feature/System/Ops/ClosedWorkspaceHistoricalAccessTest.php tests/Feature/Filament/Resources/Workspaces/WorkspaceClosureStatusTest.php tests/Feature/Filament/Resources/TenantResource/TenantWorkspaceRemovalTest.php tests/Feature/Filament/Pages/WorkspaceContextClosureRecoveryTest.php` - `export PATH="/bin:/usr/bin:/usr/local/bin:$PATH" && cd apps/platform && ./vendor/bin/sail bin pint --dirty --format agent` - manual integrated-browser smoke for admin tenant remove/restore plus chooser recovery and system workspace close/reopen Co-authored-by: Ahmed Darrazi <ahmed.darrazi@live.de> Reviewed-on: #337
49 lines
1.3 KiB
PHP
49 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace App\Support\Auth;
|
|
|
|
/**
|
|
* Platform Capability Registry
|
|
*
|
|
* These capabilities are used for platform operators authenticated via the
|
|
* `platform` guard (System panel).
|
|
*/
|
|
class PlatformCapabilities
|
|
{
|
|
public const ACCESS_SYSTEM_PANEL = 'platform.access_system_panel';
|
|
|
|
public const USE_BREAK_GLASS = 'platform.use_break_glass';
|
|
|
|
public const CONSOLE_VIEW = 'platform.console.view';
|
|
|
|
public const DIRECTORY_VIEW = 'platform.directory.view';
|
|
|
|
public const DIRECTORY_MANAGE = 'platform.directory.manage';
|
|
|
|
public const COMMERCIAL_LIFECYCLE_MANAGE = 'platform.commercial_lifecycle.manage';
|
|
|
|
public const SUPPORT_ACCESS_MANAGE = 'platform.support_access.manage';
|
|
|
|
public const OPERATIONS_VIEW = 'platform.operations.view';
|
|
|
|
public const OPERATIONS_MANAGE = 'platform.operations.manage';
|
|
|
|
public const OPS_VIEW = 'platform.ops.view';
|
|
|
|
public const RUNBOOKS_VIEW = 'platform.runbooks.view';
|
|
|
|
public const RUNBOOKS_RUN = 'platform.runbooks.run';
|
|
|
|
public const OPS_CONTROLS_MANAGE = 'platform.ops.controls.manage';
|
|
|
|
/**
|
|
* @return array<string>
|
|
*/
|
|
public static function all(): array
|
|
{
|
|
$reflection = new \ReflectionClass(self::class);
|
|
|
|
return array_values($reflection->getConstants());
|
|
}
|
|
}
|