gehgassi_backend/gehGassi.Permissions/PermissionChecker.cs

48 lines
2.0 KiB
C#

using System;
using System.ComponentModel;
using System.Linq;
namespace gehGassi.Permissions
{
/// <summary>
/// Hilfsklasse für die Überprüfung von Permissions
/// </summary>
public static class PermissionChecker
{
/// <summary>
/// Püft ob der gepackte Permission-String eine gesuchte Permission beinhaltet
/// </summary>
/// <param name="packedPermissions">Gepackte Liste mit Permissions</param>
/// <param name="permissionName">Gesuchte Permission</param>
/// <returns>true wenn gefunden, false sonst</returns>
public static bool ThisPermissionIsAllowed(this string packedPermissions, string permissionName)
{
var usersPermissions = packedPermissions.UnpackPermissionsFromString().ToArray();
if (!Enum.TryParse(permissionName, true, out Permission permissionToCheck))
throw new InvalidEnumArgumentException($"{permissionName} could not be converted to a {nameof(Permission)}.");
return usersPermissions.Contains(permissionToCheck);
}
/// <summary>
/// Fügt eine Permission einem gepackten Permissionstring hinzu
/// </summary>
/// <param name="packedPermissions">Gepackte Liste mit Permissions</param>
/// <param name="permissionName">Gesuchte Permission</param>
/// <returns>Neuer packed Permisison-String</returns>
public static string AddPermission(this string packedPermissions, string permissionName)
{
var usersPermissions = packedPermissions.UnpackPermissionsFromString().ToList();
if (!Enum.TryParse(permissionName, true, out Permission permissionToCheck))
throw new InvalidEnumArgumentException($"{permissionName} could not be converted to a {nameof(Permission)}.");
if (!usersPermissions.Contains(permissionToCheck))
usersPermissions.Add(permissionToCheck);
return usersPermissions.PackPermissionsIntoString();
}
}
}