gehgassi_backend/gehGassi.Web/Auth/PermissionExtensions.cs

100 lines
4.1 KiB
C#

using System.Linq;
using System.Security.Claims;
using gehGassi.Domain.Users;
using gehGassi.Permissions;
namespace gehGassi.Web.Auth
{
/// <summary>
/// Erweiterungen für ClaimsPrincipal für Abfrage von Permissions
/// </summary>
public static class PermissionExtensions
{
/// <summary>
/// True wenn der Benutzer über zumindest eine Permission verfügt. Prüft gegen die Datenbank.
/// </summary>
/// <param name="user">ClaimsPrincipal User</param>
/// <param name="permissions">Gesuchte permissions</param>
/// <returns>true wenn verfügbar, false sonst</returns>
public static bool HasPermission(this ApplicationUser user, params Permission[] permissions)
{
var permissionClaim = user?.Permissions;
if (string.IsNullOrWhiteSpace(permissionClaim))
return false;
var permissionList = permissions.ToList();
var permissionsGranted = permissionClaim.UnpackPermissionsFromString();
foreach (var permission in permissionList)
{
if (permissionsGranted.Contains(permission))
return true;
}
return false;
}
/// <summary>
/// True wenn der Benutzer über alle Permissions verfügt. Prüft gegen die Datenbank.
/// </summary>
/// <param name="user">ClaimsPrincipal User</param>
/// <param name="permissions">Gesuchte permissions</param>
/// <returns>true wenn verfügbar, false sonst</returns>
public static bool HasPermissions(this ApplicationUser user, params Permission[] permissions)
{
var permissionClaim = user?.Permissions;
if (string.IsNullOrWhiteSpace(permissionClaim))
return false;
var permissionList = permissions.ToList();
var permissionsGranted = permissionClaim.UnpackPermissionsFromString();
foreach (var permission in permissionList)
{
if (!permissionsGranted.Contains(permission))
return false;
}
return true;
}
/// <summary>
/// True wenn der Benutzer über zumindest eine Permission verfügt. Prüft gegen Claims.
/// </summary>
/// <param name="user">ClaimsPrincipal User</param>
/// <param name="permissions">Gesuchte permissions</param>
/// <returns>true wenn verfügbar, false sonst</returns>
public static bool HasPermission(this ClaimsPrincipal user, params Permission[] permissions)
{
var permissionClaim = user?.Claims.SingleOrDefault(x => x.Type == ClaimConstants.PackedPermissionClaimType);
if (permissionClaim != null)
{
var permissionList = permissions.ToList();
var permissionsGranted = permissionClaim.Value.UnpackPermissionsFromString();
foreach (var permission in permissionList)
{
if (permissionsGranted.Contains(permission))
return true;
}
}
return false;
}
/// <summary>
/// True wenn der Benutzer über alle Permissions verfügt. Prüft gegen Claims.
/// </summary>
/// <param name="user">ClaimsPrincipal User</param>
/// <param name="permissions">Gesuchte permissions</param>
/// <returns>true wenn verfügbar, false sonst</returns>
public static bool HasPermissions(this ClaimsPrincipal user, params Permission[] permissions)
{
var permissionClaim = user?.Claims.SingleOrDefault(x => x.Type == ClaimConstants.PackedPermissionClaimType);
if (permissionClaim != null)
{
var permissionList = permissions.ToList();
var permissionsGranted = permissionClaim.Value.UnpackPermissionsFromString();
foreach (var permission in permissionList)
{
if (!permissionsGranted.Contains(permission))
return false;
}
}
return true;
}
}
}