33 lines
1.3 KiB
C#
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();
|
|
}
|
|
}
|