87 lines
2.4 KiB
PHP
87 lines
2.4 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Filament\Pages\ManagedTenants;
|
|
|
|
use App\Models\Tenant;
|
|
use App\Models\User;
|
|
use App\Services\Auth\CapabilityResolver;
|
|
use App\Support\Auth\Capabilities;
|
|
use App\Support\ManagedTenants\ManagedTenantContext;
|
|
use App\Support\Rbac\UiEnforcement;
|
|
use BackedEnum;
|
|
use Filament\Actions\Action;
|
|
use Filament\Pages\Page;
|
|
use UnitEnum;
|
|
|
|
class ViewManagedTenant extends Page
|
|
{
|
|
protected static bool $isDiscovered = false;
|
|
|
|
protected static bool $shouldRegisterNavigation = false;
|
|
|
|
protected static ?string $slug = 'managed-tenants/{managedTenant}';
|
|
|
|
protected static ?string $title = 'Managed tenant';
|
|
|
|
protected string $view = 'filament.pages.managed-tenants.view';
|
|
|
|
public Tenant $tenant;
|
|
|
|
public function mount(string $managedTenant): void
|
|
{
|
|
$this->tenant = Tenant::withTrashed()->findOrFail($managedTenant);
|
|
|
|
$user = auth()->user();
|
|
|
|
if (! $user instanceof User) {
|
|
abort(403);
|
|
}
|
|
|
|
/** @var CapabilityResolver $resolver */
|
|
$resolver = app(CapabilityResolver::class);
|
|
|
|
if (! $resolver->isMember($user, $this->tenant)) {
|
|
abort(404);
|
|
}
|
|
|
|
if (! $resolver->can($user, $this->tenant, Capabilities::TENANT_MANAGED_TENANTS_VIEW)) {
|
|
abort(403);
|
|
}
|
|
|
|
if (! $this->tenant->isActive()) {
|
|
ManagedTenantContext::setArchivedTenant($this->tenant);
|
|
|
|
$this->redirect(ArchivedStatus::getUrl());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @return array<Action>
|
|
*/
|
|
protected function getHeaderActions(): array
|
|
{
|
|
return [
|
|
UiEnforcement::forTableAction(
|
|
Action::make('open')
|
|
->label('Open')
|
|
->icon('heroicon-o-arrow-top-right-on-square')
|
|
->url(fn (): string => "/admin/managed-tenants/{$this->tenant->getKey()}/open"),
|
|
fn () => $this->tenant,
|
|
)
|
|
->requireCapability(Capabilities::TENANT_MANAGED_TENANTS_VIEW)
|
|
->apply(),
|
|
|
|
UiEnforcement::forTableAction(
|
|
Action::make('edit')
|
|
->label('Edit')
|
|
->url(fn (): string => EditManagedTenant::getUrl(['managedTenant' => $this->tenant])),
|
|
fn () => $this->tenant,
|
|
)
|
|
->requireCapability(Capabilities::TENANT_MANAGED_TENANTS_MANAGE)
|
|
->apply(),
|
|
];
|
|
}
|
|
}
|