83 lines
3.0 KiB
C#
83 lines
3.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Diagnostics.CodeAnalysis;
|
|
using System.Globalization;
|
|
using System.Linq;
|
|
|
|
namespace gehGassi.Permissions
|
|
{
|
|
/// <summary>
|
|
/// Hilfsklasse zum Packen und entpacken der Permissions
|
|
/// </summary>
|
|
public static class PermissionPacker
|
|
{
|
|
public const char PackType = 'H';
|
|
public const int PackedSize = 4;
|
|
|
|
public static string FormDefaultPackPrefix()
|
|
{
|
|
return $"{PackType}{PackedSize:D1}-";
|
|
}
|
|
|
|
/// <summary>
|
|
/// Liste von Permissions in String packen
|
|
/// </summary>
|
|
/// <param name="permissions">Liste Permissions</param>
|
|
/// <returns>Rechte in String gepackt</returns>
|
|
public static string PackPermissionsIntoString(this IEnumerable<Permission> permissions)
|
|
{
|
|
return permissions.Aggregate(FormDefaultPackPrefix(), (s, permission) => s + ((int)permission).ToString("X4"));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Entpacken der Permissions aus einem string in eine Liste von ints
|
|
/// </summary>
|
|
/// <param name="packedPermissions">Gepackte Liste mit Permissions</param>
|
|
/// <returns>Liste Permissions als int</returns>
|
|
[ExcludeFromCodeCoverage]
|
|
public static IEnumerable<int> UnpackPermissionValuesFromString(this string packedPermissions)
|
|
{
|
|
var packPrefix = FormDefaultPackPrefix();
|
|
if (packedPermissions == null)
|
|
{
|
|
throw new ArgumentNullException(nameof(packedPermissions));
|
|
}
|
|
|
|
if (!packedPermissions.StartsWith(packPrefix))
|
|
{
|
|
throw new InvalidOperationException("The format of the packed permissions is wrong" +
|
|
$" - should start with {packPrefix}");
|
|
}
|
|
|
|
int index = packPrefix.Length;
|
|
while (index < packedPermissions.Length)
|
|
{
|
|
yield return int.Parse(packedPermissions.Substring(index, PackedSize), NumberStyles.HexNumber);
|
|
index += PackedSize;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Liste von Permissions aus String entpacken
|
|
/// </summary>
|
|
/// <param name="packedPermissions">Gepackte Liste mit Permissions</param>
|
|
/// <returns>Liste Permissions</returns>
|
|
public static IEnumerable<Permission> UnpackPermissionsFromString(this string packedPermissions)
|
|
{
|
|
return packedPermissions.UnpackPermissionValuesFromString().Select(x => ((Permission)x));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Sucht eine Permission im gepackten string
|
|
/// </summary>
|
|
/// <param name="permissionName">Name der gesuchten Permission</param>
|
|
/// <returns>Permission wenn gefunden, null sonst</returns>
|
|
public static Permission? FindPermissionViaName(this string permissionName)
|
|
{
|
|
return Enum.TryParse(permissionName, out Permission permission)
|
|
? (Permission?)permission
|
|
: null;
|
|
}
|
|
}
|
|
}
|