Initial commit
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user