TenantAtlas/resources/views/filament/widgets/tenant/admin-roles-summary.blade.php
Ahmed Darrazi 6b381e9517 feat: spec 105 — Entra Admin Roles scan, reports, findings, widget + summary UX improvement
- Entra admin roles scan job (ScanEntraAdminRolesJob)
- Report service with fingerprint deduplication
- Finding generator with high-privilege role catalog
- Admin roles summary widget on tenant view page
- Alert integration for entra.admin_roles findings
- Graph contracts for roleDefinitions + roleAssignments
- Entra permissions registry (config/entra_permissions.php)
- StoredReport fingerprint migration
- OperationCatalog label + duration for entra.admin_roles.scan
- SummaryCountsNormalizer: filter zeros, humanize keys globally
- 11 new test files (71+ tests, 286+ assertions)
- Spec + tasks + checklist updates
2026-02-22 03:35:46 +01:00

63 lines
2.1 KiB
PHP

@php
/** @var ?\App\Models\Tenant $tenant */
/** @var ?array $reportSummary */
/** @var ?string $lastScanAt */
/** @var int $highPrivilegeCount */
/** @var bool $canManage */
/** @var bool $canView */
/** @var ?string $viewReportUrl */
@endphp
<x-filament::section heading="Entra admin roles">
<x-slot name="afterHeader">
@if ($canView && $viewReportUrl)
<a
href="{{ $viewReportUrl }}"
class="text-sm font-medium text-primary-600 hover:text-primary-500 dark:text-primary-400 dark:hover:text-primary-300"
>
View latest report
</a>
@endif
</x-slot>
@if ($reportSummary === null)
<div class="text-sm text-gray-500 dark:text-gray-400">
No scan performed yet.
</div>
@else
<div class="space-y-3">
<div class="flex items-center justify-between gap-3">
<div class="text-sm text-gray-500 dark:text-gray-400">
Last scan
</div>
<div class="text-sm font-medium">
{{ $lastScanAt }}
</div>
</div>
<div class="flex items-center justify-between gap-3">
<div class="text-sm text-gray-500 dark:text-gray-400">
High-privilege assignments
</div>
<div class="text-sm font-medium {{ $highPrivilegeCount > 0 ? 'text-danger-600 dark:text-danger-400' : 'text-success-600 dark:text-success-400' }}">
{{ $highPrivilegeCount }}
</div>
</div>
</div>
@endif
@if ($canManage)
<div class="mt-4">
<x-filament::button
wire:click="scanNow"
size="sm"
color="primary"
wire:loading.attr="disabled"
>
<span wire:loading.remove wire:target="scanNow">Scan now</span>
<span wire:loading wire:target="scanNow">Scanning…</span>
</x-filament::button>
</div>
@endif
</x-filament::section>