using SharepointToolbox.Web.Core.Models; namespace SharepointToolbox.Web.Core.Helpers; public static class PermissionConsolidator { internal static string MakeKey(UserAccessEntry entry) => string.Join("|", entry.UserLogin.ToLowerInvariant(), entry.PermissionLevel.ToLowerInvariant(), entry.AccessType.ToString(), entry.GrantedThrough.ToLowerInvariant()); public static IReadOnlyList Consolidate(IReadOnlyList entries) { if (entries.Count == 0) return Array.Empty(); return entries .GroupBy(e => MakeKey(e)) .Select(g => { var first = g.First(); var locations = g.Select(e => new LocationInfo( e.SiteUrl, e.SiteTitle, e.ObjectTitle, e.ObjectUrl, e.ObjectType)).ToList(); return new ConsolidatedPermissionEntry( first.UserDisplayName, first.UserLogin, first.PermissionLevel, first.AccessType, first.GrantedThrough, first.IsHighPrivilege, first.IsExternalUser, locations, first.TargetUrl, first.TargetLabel, first.SharingLinkType); }) .OrderBy(c => c.UserLogin).ThenBy(c => c.PermissionLevel).ToList(); } }