Files
2026-06-02 10:56:03 +02:00

33 lines
1.3 KiB
C#

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<ConsolidatedPermissionEntry> Consolidate(IReadOnlyList<UserAccessEntry> entries)
{
if (entries.Count == 0) return Array.Empty<ConsolidatedPermissionEntry>();
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();
}
}