- Extends FeatureViewModelBase with RunOperationAsync calling IUserAccessAuditService.AuditUsersAsync - People picker with 300ms debounced Graph search via IGraphUserSearchService.SearchUsersAsync - SelectedUsers ObservableCollection<GraphUserResult> with AddUserCommand/RemoveUserCommand - Results ObservableCollection<UserAccessEntry> with CollectionViewSource grouping (by user/site) and FilterText predicate - Summary banner properties: TotalAccessCount, SitesCount, HighPrivilegeCount (computed from Results) - ExportCsvCommand/ExportHtmlCommand using UserAccessCsvExportService/UserAccessHtmlExportService - Site selection with _hasLocalSiteOverride + OnGlobalSitesChanged pattern from PermissionsViewModel - Dual constructors (DI + internal test constructor omitting export services) - OnTenantSwitched resets all state (results, users, search, sites)
19 KiB
19 KiB